请问匿名内部类访问其外部类的方法时,为什么要用 外部类.当前对角.方法名 这样的语法?
为什么不能直接访问其外部类的方法?而匿名内部类访问其外部类的属性时,又为什么可以直接访问?如下代码所示:count是外部类的属性,匿名内部类可以直接访问。而remove()方法则需用
指定实例的形式来访问?
public MyClass{private int count;
...public Iterator iterator() {
return new Iterator(){
 private int index=0;
 public boolean hasNext() {
return index<count; 
 }  public void remove() {
 MyClass.this.remove(--index);
 //remove(--index);//Why can not?
 }
};
}

public remove(int index){
...
}
}

解决方案 »

  1.   

    方法也可以直接调用,你这里是因为内部类的方法签名和外部类的方法签名相同,所以要用MyClass.this.remove()的形式。
      

  2.   

    1. 内部类可以声明为private或protected,可以声明为static
    2. 内部类中可以直接访问外部类的方法。
    3. 内部类中可以直接访问外部类的数据成员
    4. 在外部类的静态方法中创建内部类对象,必须采用“外部类名.内部类名”的形式指定对象的类型,并且非静态内部类的对象必须通过外部类对象来创建。如:
    public static void f(){
    OuterClass out = new OuterClass();
    OuterClass.InnerClass in = out.new InnerClass();
    }
    5. 不能通过外部类对象访问内部类成员
    6. 不能通过内部类对象访问外部类成员
    7. 静态内部类对象可以直接采用“外部类名.内部类名”形式创建
     OuterClass.M m = new OuterClass.M();8. 私有内部类无法通过第4条创建
      

  3.   

    1. 内部类可以声明为private或protected,可以声明为static
    2. 内部类中可以直接访问外部类的方法。
    3. 内部类中可以直接访问外部类的数据成员
    4. 在外部类的静态方法中创建内部类对象,必须采用“外部类名.内部类名”的形式指定对象的类型,并且非静态内部类的对象必须通过外部类对象来创建。如:
    public static void f(){
    OuterClass out = new OuterClass();
    OuterClass.InnerClass in = out.new InnerClass();
    }
    5. 不能通过外部类对象访问内部类成员
    6. 不能通过内部类对象访问外部类成员
    7. 静态内部类对象可以直接采用“外部类名.内部类名”形式创建
    OuterClass.M m = new OuterClass.M();8. 私有内部类无法通过第4条创建更多可查看http://www.java1995.cn/wiki/topic/2