maoruibin / maoruibin.github.com

personal blog
http://gudong.site
MIT License
21 stars 5 forks source link

Java 内部类 #83

Open maoruibin opened 5 years ago

maoruibin commented 5 years ago

关于内部类更详细的解释 https://www.jianshu.com/p/f897100a09fc

Java 类中,每一个类都会有一个默认构造方法叫 init 。

Java 中可以在类中继续定义一个类,这个类就叫做内部类。如下,在外部类 Outer 中创建了一个名为 Inner 的 Class,它就叫做 Outer 的内部类。

在 Java 的内部类中,内部类是可以访问外部类属性的,这是一开始学 Java 时大家都知道的,但是这里要问的是,这个机制是如何做到的?

在 非静态内部类中,这个内部类会默认持有一个外部类的实例,所以当我们访问外部类对象时,其实是通过这个默认实例来访问的。

public class Outer {
private String name;
class Inner{
void test(){
System.out.print("name is "+name);
}
}
}

那这个外部类的实例叫什么? this$0

maoruibin commented 5 years ago

如上,一开始为匿名内部类设置值后,以后再次更新数据,匿名内部类中的变量值是不更新的。