静态内部 class 在 java 中扩展抽象外部 class
Static inner class extending abstract outer class in java
我今天看到这个模式,让我很困惑:
abstract class A {
// does something
static class B extends A {
// does something as well
}
}
我发现了两件奇怪的事情:
- 静态class可以使用
new A.B()
初始化。
- 静态 class 在应用程序中不是唯一的(因此,不是真正的静态),因为每次初始化都会创建一个新对象。
我还在纳闷为什么要用这样的模式? static class
在这种情况下是否意味着您可以静态访问它的构造函数,而无需创建 A
的实例,但实际上它在应用程序中并不是以任何方式唯一的?
编辑:
好的,所以我认为我对静态 classes 的理解来自 C#。我现在很清楚 java classes 的静态性。但是你什么时候会使用这样的模式(内部静态class扩展外部抽象)为什么?
static class 无法访问外部 class 方法和变量,它们的关键字有点意味着它是一个单独的 class.
class Out {
int i; void x(){}
static class In() {
i++; x(); // not valid instructions
}
class In2() {
i++; x(); // valid instructions
}
}
要实例化静态内部 class 您只需创建它的一个对象:
Out.In obj = new Out.In();
非静态需要外部 class 实例化:
Out o = new Out();
Out.In2 obj = new o.In2();
(如果在 Out 字内实例化 In2,则这是隐含的)
我今天看到这个模式,让我很困惑:
abstract class A {
// does something
static class B extends A {
// does something as well
}
}
我发现了两件奇怪的事情:
- 静态class可以使用
new A.B()
初始化。 - 静态 class 在应用程序中不是唯一的(因此,不是真正的静态),因为每次初始化都会创建一个新对象。
我还在纳闷为什么要用这样的模式? static class
在这种情况下是否意味着您可以静态访问它的构造函数,而无需创建 A
的实例,但实际上它在应用程序中并不是以任何方式唯一的?
编辑:
好的,所以我认为我对静态 classes 的理解来自 C#。我现在很清楚 java classes 的静态性。但是你什么时候会使用这样的模式(内部静态class扩展外部抽象)为什么?
static class 无法访问外部 class 方法和变量,它们的关键字有点意味着它是一个单独的 class.
class Out {
int i; void x(){}
static class In() {
i++; x(); // not valid instructions
}
class In2() {
i++; x(); // valid instructions
}
}
要实例化静态内部 class 您只需创建它的一个对象:
Out.In obj = new Out.In();
非静态需要外部 class 实例化:
Out o = new Out();
Out.In2 obj = new o.In2();
(如果在 Out 字内实例化 In2,则这是隐含的)