package zhouzhou.javabase.innerclass;public class OuterClass {
private int index=100;
//方法里面定义内部类
void favory(){
class InnerClass{
void mothodInner(){
System.out.println("this inner class in mothod for favory");
}
}

}
//语句块里面定义内部类
{
class InnerClass{
void mothodInner(){
System.out.println("this inner class in sentence black");
}
}

}

void monkey(final int a){
final int b=0; //本地变量 局部变量
if(true){
{
class MiddleClass{
private int index=200;
class InnerClass{
private int index=300;

void print(){
int index=400;
System.out.println(index);
System.out.println(this.index);
System.out.println(MiddleClass.this.index);
System.out.println(OuterClass.this.index);
System.out.println(a);
System.out.println(b);
}

}

}

}

}
//MiddleClass middle=new MiddleClass();
}
}
请问怎么访问MiddleClass InnerClass 这两个内部类 我最终的目的是想访问InnerClass 类的prin()方法
另外 monkey()方法的本地变量为什么一定要声明为 final呢~?

解决方案 »

  1.   

    Inner class, inner access...
      

  2.   

    内部类。是一个新的对象了。是放在内存堆中的。
    而局部变量是放在内存的栈中的。
    局部变量只能在局部使用
    final 可以使变量在整个方法中使用。
    所以内部类只能使用final 变量
    而且Sun 公司就规定必须这么做。
      

  3.   

    1、成都培训网www.cd-pxw.com汇集众多培训学校,优秀的培训课程,同时提供学习资料下载,学习技巧资料文章
      

  4.   

    public  InterC monkey(final int a){
    final int b=0; //本地变量 局部变量
    if(true){
    {
    class Middle implements InterC{

    private int index=200;
    public  String name="mimin";

    public InterB getInnerClass(){
    return new InnerClass();
    }

    class InnerClass implements InterB{
    private int index=300;

    public void print(){
    int index=400;
    System.out.println("index="+index);
    System.out.println("this.index="+this.index);
    System.out.println("Middle.this.index="+Middle.this.index);
    System.out.println("OuterClass.this.index="+OuterClass.this.index);
    System.out.println("a="+a);
    System.out.println("b="+b);
    }
    }
    }
    return new Middle();
    }
    }
    return null;
    }
    }interface InterC{
    InterB getInnerClass();
    }
    interface InterB{
    void print();

    }找到答案了哈~※内部类只能访问外部类的所有成员,对于声明内部类的方法中方法参数和方法中的局部变量(如m),内部类是不能访问的;但如果局部变量被final修饰,如n,内部类可以访问,由于final型的变量属于特殊变量,它的生命周期比方法要长,只有当实例对象没有被引用时,且被系统回收后,变量的生命周期才算结束。※由于内部类的类名只能使用在方法内部,所以该方法的返回类型也是不能使用该内部类的类名。如果这样的话,如何访问内部类呢?解决的方法是通过多态的技术。如果该内部类继承了一个已知的类或抽象类或者实现一个接口,就可以将内部类的返回类型写成父类的类型了。
      

  5.   

    public  InterC monkey(final int a){
    final int b=0; //本地变量 局部变量
    if(true){
    {
    class Middle implements InterC{

    private int index=200;
    public  String name="mimin";

    public InterB getInnerClass(){
    return new InnerClass();
    }

    class InnerClass implements InterB{
    private int index=300;

    public void print(){
    int index=400;
    System.out.println("index="+index);
    System.out.println("this.index="+this.index);
    System.out.println("Middle.this.index="+Middle.this.index);
    System.out.println("OuterClass.this.index="+OuterClass.this.index);
    System.out.println("a="+a);
    System.out.println("b="+b);
    }
    }
    }
    return new Middle();
    }
    }
    return null;
    }
    }interface InterC{
    InterB getInnerClass();
    }
    interface InterB{
    void print();

    }找到答案了哈~※内部类只能访问外部类的所有成员,对于声明内部类的方法中方法参数和方法中的局部变量(如m),内部类是不能访问的;但如果局部变量被final修饰,如n,内部类可以访问,由于final型的变量属于特殊变量,它的生命周期比方法要长,只有当实例对象没有被引用时,且被系统回收后,变量的生命周期才算结束。※由于内部类的类名只能使用在方法内部,所以该方法的返回类型也是不能使用该内部类的类名。如果这样的话,如何访问内部类呢?解决的方法是通过多态的技术。如果该内部类继承了一个已知的类或抽象类或者实现一个接口,就可以将内部类的返回类型写成父类的类型了。