【发布时间】:2019-11-01 07:26:28
【问题描述】:
现在我在研究静态内部类,发现静态内部类和非静态内部类的对象创建方式是不同的。但我不明白为什么。
对于非静态内部类:
Outer.Inner inner = new Outer().new Inner();
对于静态内部类:
Outer.Inner inner = new Outer.Inner();
【问题讨论】:
-
非静态内部类具有对外部类实例的隐式引用。 (通常,这些是由实例本身创建的。上面第一条语句中的双构造函数调用可能是合法的,但不太有用。)
-
一般情况下,不要使用非静态内部类。
-
@steven35 - 内部类可以成为外部类实现的重要部分。例如,它们可以实现外部类没有的接口。
-
好吧,正如您自己观察到的那样,区别在于第一个是“非静态”,第二个是“静态”。它与字段或方法基本相同:要访问非静态成员(例如调用方法),您需要类的实例,而要访问静态成员,您只需要类本身。为了说明这一点:将
Inner()设为Outer的方法,假设为public void inner()。现在非静态调用将是new Outer().inner(),而静态调用将是Outer.inner()。
标签: java class static static-classes