我想知道在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来验证这一点。

10-01 08:00
查看更多