Java 为什么允许静态字段存在两次?
下面是我的问题: 我有一个带有静态变量nr的接口Java 为什么允许静态字段存在两次?,java,static,Java,Static,下面是我的问题: 我有一个带有静态变量nr的接口 public interface TestInterface { public static int nr = 1; } 以及一个实现该接口的类,它也有自己的静态变量nr public class TestClass implements TestInterface { public static int nr = 2; } 实际上,我可以毫无差错地做到这一点 public static void main(S
public interface TestInterface {
public static int nr = 1;
}
以及一个实现该接口的类,它也有自己的静态变量nr
public class TestClass implements TestInterface {
public static int nr = 2;
}
实际上,我可以毫无差错地做到这一点强>
public static void main(String args[]) {
TestClass test = new TestClass();
System.out.println(TestClass.nr);
}`
问题:为什么允许这样做?
据我所知,静态字段在类实例中应该是通用的,但是关于超类-子类关系呢?在您的代码中,两个
静态
字段实际上都是为单独的类型定义的,即一个用于测试接口
接口类型,另一个用于测试类
类类型
您需要了解的一点是,当涉及到
静态时
,没有重写,因此它们将被视为单独的字段。在超类-子类关系中,如果子类的静态变量具有相同的名称,则超类的静态变量将被子类的静态变量隐藏。因为静态变量不是多态的。这是语言明确允许的
如果类声明了具有特定名称的字段,
然后该字段的声明被称为隐藏
任何和所有可访问的字段声明
在超类中使用相同的名称,以及
班上的高级介面
为什么不允许它呢?
超类-子类关系
这里不存在这种关系,它只是一个实现接口的类。因为从“重新访问此代码”的角度来看,这是令人困惑的。“不可能”带来了更好的实践。接口变量应该按照约定以大写字母拼写,因为它是一个常量。隐藏,而不是阴影。静态字段不被继承是不正确的。JLS规定,“类从其直接超类和直接超接口继承超类和超接口的所有非私有字段,这些字段可供类中的代码访问,且不被类中的声明隐藏。”
静态字段显示在该部分的示例中。@LewBloch我所说的继承是指我们不能重写,为了让它更清晰而进行了更正