我想知道在2个Java类和
就结果输出而言,运行代码意味着什么?
我有一个带有protected static boolean field = false
和一个子类的抽象类
具有相同名称的 boolean 字段,但不是静态字段,并将其设置为true
。
如果我有此代码:
Superclass d = new subclass();
父类和 boolean 型字段中的 boolean 型字段的值是什么
在子类中?上面的赋值后,子类字段是否保持为
false
? 最佳答案
static
成员永远不会被覆盖(当然也不会被非静态成员覆盖)。并且由于您应该像这样访问它们:ClassName.member
,所以也不必担心隐藏它们。
在您的情况下,您将像这样访问Superclass
字段:Superclass.field
。像这样的Subclass
实例的字段:subclass.field
。但是,如果在上述Subclass
变量中有Superclass
实例,则此代码:d.field
将访问Superclass
定义的静态字段,在您的情况下为false
。
但这不会更改Subclass
实例的值,它只是访问“错误的”成员!您可以通过将d
中的实例放回Subclass
变量中,然后再次读取field
来验证这一点。