请问匿名内部类访问其外部类的方法时,为什么要用 外部类.当前对角.方法名 这样的语法?
为什么不能直接访问其外部类的方法?而匿名内部类访问其外部类的属性时,又为什么可以直接访问?如下代码所示: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){
...
}
}
为什么不能直接访问其外部类的方法?而匿名内部类访问其外部类的属性时,又为什么可以直接访问?如下代码所示: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){
...
}
}
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条创建
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