Java的语法规定了调用子类的构造方法时,必须要显式调用父类的构造方法,父类构造方法都是private那就无法在外部调用,也就证明无法继承该类了
匿名内部类的构造方法是编译器定义的,编译器编译的时候,匿名内部类会生成一个:外部类$x.class的文件,
public class MainDemo {
public void run() {
final String name = "pengboboer";
new MyBean().new Info(){
void onClick() {
String myName = name;
}
};
}
}
首先,Info要持有它外部类MyBean实例的引用
同时它也在非静态方法区,Info也会持有MainDemo的引用
同时Info要访问局部变量,所以也会复制拷贝一份给Info
public class MainDemo$1 {
public MainDemo$1(MainDemo mainDemo, MyBean myBean, String name){
...
}
}