Java 11 语言规范(8.3 字段声明)中的这个短语对我来说不清楚
一个类从其直接超类和直接超接口继承超类和超接口的所有非私有字段,这些字段都可以访问(第 6.6 节)类中的代码,并且不会被类中的声明隐藏。
不清楚超类的名称是否被类中的声明隐藏是否意味着非私有字段不被继承?
短语“并且没有被类中的声明隐藏”的部分令人困惑。
Java 11 语言规范(8.3 字段声明)中的这个短语对我来说不清楚
一个类从其直接超类和直接超接口继承超类和超接口的所有非私有字段,这些字段都可以访问(第 6.6 节)类中的代码,并且不会被类中的声明隐藏。
不清楚超类的名称是否被类中的声明隐藏是否意味着非私有字段不被继承?
短语“并且没有被类中的声明隐藏”的部分令人困惑。
哦,这句话我明白了。问题是英语不是我的母语。
这句话的意思是,如果超类或超接口的字段例如被子类的声明隐藏,那么根据 Java 规范,该字段不会被继承。虽然在我看来它看起来很奇怪。
但是为了证明我的结论,我可以引用示例 8.3.1.1-2 的注释。隐藏类变量。有写如下
...因为类 Test 中 x 的声明隐藏了类 Point 中 x 的定义,所以类 Test 不会从其超类 Point 继承字段 x。
然而,子类Test
可以访问该类的隐藏字段Point
。因此,对于 C++ 程序员来说,类Test
不继承该字段的声明x
看起来很奇怪。:)