- 匿名内部类既是一个类的定义,同时本身也是一个对象,它既有定义类的特征,也有创建对象的特征
class outer05{
private int n1=100;
public void f2(){
//基于类的匿名内部类
person person = new person(){
@Override
public void hi() {
System.out.println("重写了hi方法");
}
};
person.hi();//动态绑定 真正的运行类型是outer05$1
new person(){
@Override
public void say1(String name) {
super.say1(name);
}
}.say1("jack");/*可以不创建对象直接.say()*/
}
}
class person{
public void hi(){
}
public void say1(String name){
System.out.println("haha"+name);
}
}
- 可以直接访问外部类的所有成员,包括私有的
- 不能添加访问修饰符,因为它的地位就是一个局部变量
- 作用域:仅仅在定义它的方法或代码块
- 匿名内部类–访问–>外部类成员
- 外部其他类–不能访问–>匿名内部类
- 如果外部类和内部类的成员重名时,内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问
这篇文章解释的挺清楚的
https://blog.youkuaiyun.com/a850661962/article/details/109642780