【问题标题】:Why two different ways to create instance of Inner classes? [duplicate]为什么有两种不同的方法来创建内部类的实例? [复制]
【发布时间】: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


【解决方案1】:

非静态类的全部意义在于它链接到外部类的实例。

这就是您需要从实例创建它的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    相关资源
    最近更新 更多