我今天看到了这种模式,它让我很困惑:
abstract class A {
// does something
static class B extends A {
// does something as well
}
}
我发现了两件奇怪的事情:
new A.B()
初始化静态类。我仍然对为什么要使用这种模式感到不安?在此上下文中static class
是否意味着您可以静态访问它的构造函数,而无需创建A
的实例,但实际上它并不是应用程序中的任何唯一方式?
编辑:
好的,所以我认为我对静态类的理解来自C#。我现在清楚java类的静态性。但是你什么时候会使用这样的模式(内部静态类扩展外部抽象类)以及为什么?
答案 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里面的单词,这是隐含的)