静态内部类在java中扩展抽象外部类

时间:2017-10-05 18:35:16

标签: java class static abstract

我今天看到了这种模式,它让我很困惑:

abstract class A {
    // does something

    static class B extends A {
        // does something as well
    }
}

我发现了两件奇怪的事情:

  • 可以使用new A.B()初始化静态类。
  • 静态类在应用程序中不是唯一的(因此,不是真正的静态),因为每次初始化都会创建一个新对象。

我仍然对为什么要使用这种模式感到不安?在此上下文中static class是否意味着您可以静态访问它的构造函数,而无需创建A的实例,但实际上它并不是应用程序中的任何唯一方式?

编辑:

好的,所以我认为我对静态类的理解来自C#。我现在清楚java类的静态性。但是你什么时候会使用这样的模式(内部静态类扩展外部抽象类)以及为什么

1 个答案:

答案 0 :(得分:1)

静态类不能访问外部类方法和变量,它们关键字类意味着它是一个分离的类。

class Out {
     int i; void x(){}
     static class In() {
       i++; x(); // not valid instructions
     }
     class In2() {
       i++; x(); // valid instructions
     }
}

要实例化静态内部类,只需创建一个对象:

  Out.In obj = new Out.In();

非静态需要使用以下实例化外部类的实例:

  Out o = new Out();
  Out.In2 obj = new o.In2();

(如果实例化In2里面的单词,这是隐含的)