黑马程序员技术交流社区

标题: 内部类和final [打印本页]

作者: 银离子    时间: 2015-1-4 23:38
标题: 内部类和final
内部类只能调用final修饰的变量,那这段代码是怎么回事呢?
  1. public class text8 {
  2.         public static void main(String[] args) {
  3.                 outer oer=new outer();//创建对象
  4.                 oer.outMethod(8);

  5.         }

  6. }
  7. class outer{
  8.         private int x=100;
  9.        
  10.         private void outMethod2(int a)//外部类方法
  11.                 {
  12.                         System.out.println(a+"   outMethod2");
  13.                 }
  14.        
  15.         void outMethod(int x)
  16.                 {          inner inn=new inner();        //创建内部类对象
  17.                         inn.inMethod(45);                //调用内部类函数
  18.                         System.out.println(x+"   outMethod");
  19.                 }
  20.         //内部类
  21.         class inner{
  22.                
  23.                 void inMethod(int a)//内部类方法
  24.                         {          int y=a+x;                        //访问外部类中的x
  25.                                 outMethod2(6);                //调用外部类函数
  26.                                 System.out.println(y+"   inMethod");
  27.                         }
  28.         }
  29. }
复制代码

作者: 王延龙    时间: 2015-1-5 09:32
内部类的种类:
    (1)成员内部类;(2)静态内部类;(3)方法内部类;(4)匿名内部类

楼主提到的内部类只能调用final修饰的变量出现在,方法内部类。

内部类定义在外部类的方法中,方法内部类只是在该方法的内部可见,即只在该方法内可以使用。
由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和static修饰符。

代码如下:希望能帮到你
作者: 王延龙    时间: 2015-1-5 09:35
  1. package com.solve_problem_0105;
  2. /*
  3. * 实现需求:测试方法内部类
  4. * 即:内部类定义在外部类的方法中
  5. * 方法内部类只是在该类的的方法的内部可见,只可以在方法内使用;
  6. * 方法内部类只能访问外部类中被final修饰的变量
  7. * 方法内部类不能使用访问控制符和static修饰符
  8. */
  9. public class TestMethodOuter {

  10.         public void show(){
  11.                 int a = 1;
  12.                 final int b = 3;
  13.                
  14.                 //方法内部类不能使用访问控制符和static修饰符
  15.                 class MethodInner{
  16.                         int c = 2;
  17.                         public void print(){
  18. //                                System.out.println("访问外部类的数据"+a); //报错编译不通过
  19.                                 System.out.println("访问外部类的final数据: "+b);
  20.                                 System.out.println("访问内部类的变量数据: "+c);
  21.                         }
  22.                 }
  23.                 //创建方法内部类的实例对象
  24.                 MethodInner mi = new MethodInner();
  25.                 //调用内部类的方法
  26.                 mi.print();
  27.         }
  28.        
  29.         //测试方法内部类
  30.         public static void main(String[] args){
  31.                 //创建外部类对象
  32.                 TestMethodOuter tmo = new TestMethodOuter();
  33.                 //调用外部类方法
  34.                 tmo.show();
  35.         }
  36. }
复制代码

作者: 446111220    时间: 2015-1-5 09:40
看大神详解
作者: 银离子    时间: 2015-1-5 10:05
王延龙 发表于 2015-1-5 09:35

谢谢了:handshake
作者: hmyf150122    时间: 2015-1-5 11:23
对啊 oer.outMethod(8);->inMethod(45);->y=45+100;//内部类可以访问成员变量的,知识方法内部类只能访问final修饰的成员
作者: hmyf150122    时间: 2015-1-5 11:27
对啊 oer.outMethod(8);->inMethod(45);->y=45+100;//内部类可以访问成员变量的,知识方法内部类只能访问final修饰的成员->outMethod2(6); 打印6   outMethod2
->System.out.println(y+"   inMethod");打印145   inMethod
-> System.out.println(x+"   outMethod");打印8   outMethod
作者: 王景阳    时间: 2015-1-5 11:43
我发现 你解释的很到位哦 二楼的楼主  其实内部类的作用范围和局部变量类似  都是在一定范围内有效  超过超过范围内  无法调用
作者: dede风    时间: 2015-1-5 12:04
学习中

作者: 赵涛涛    时间: 2015-1-5 22:29
王延龙 发表于 2015-1-5 09:35

谢谢详解!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2