我正在浏览规范,并发现不可能在内部类中拥有不是最终编译时间常数的静态成员。
class HasStatic { static int j = 100; } class myInnerClassTest { class Inner extends HasStatic { static final int x = 3; // OK: compile-time constant static int y = 4; // Compile-time error: an inner class } static class NestedButNotInner{ static int z = 5; // OK: not an inner class } interface NeverInner {} // Interfaces are never inner }
而为什么呢?为什么我们可以在内部类中拥有静态的final成员,却不能拥有static方法?它可以从其所有者类继承静态成员。但是为什么不应该呢?OOP的主要原理是什么?
您的课程myInnerClassTest未声明为静态。那么,它具有静态场到底意味着什么呢?
myInnerClassTest
可不可能是
乍一看,大多数程序员可能会认为这是第一种情况,而(非静态)内部类的封装逻辑可能应该导致第二种选择。不管是哪种情况(或两者都有不同的修饰符),都需要一个新的定义static,可能没有必要。无论哪种情况,程序员都会对确切含义感到困惑。
static
从规格:
内部类是未显式或隐式声明为static的嵌套类。 内部类包括本地(第14.3节),匿名(第15.9.5节)和非静态成员类(第8.5节)。 内部类可能未声明静态初始化器(第8.7节)或成员接口,否则会发生编译时错误。 内部类不得声明静态成员,除非它们是常量变量(第4.12.4节),否则会发生编译时错误。
内部类是未显式或隐式声明为static的嵌套类。
内部类包括本地(第14.3节),匿名(第15.9.5节)和非静态成员类(第8.5节)。
内部类可能未声明静态初始化器(第8.7节)或成员接口,否则会发生编译时错误。
内部类不得声明静态成员,除非它们是常量变量(第4.12.4节),否则会发生编译时错误。