【发布时间】:2018-08-11 02:42:33
【问题描述】:
我做了一些研究,以了解私有实例字段和方法是否由子类从其超类继承。
实际上,我在不同的论坛上给出了相互矛盾的答案,但最有说服力的是,就像 java 文档所说,私有字段和方法永远不会被继承,但是子类的实例为私有字段和方法分配了一些内存超类。
然而,在我最可靠的文档来源,即“java in a nutshell 6th edition”一书中,它说:
这种潜在的不可访问成员的存在似乎与类的成员在类的主体内总是可访问的声明相冲突。为了消除这种混淆,我们将“继承成员”定义为那些可访问的超类成员。
那么关于成员可访问性的正确说法是:“所有继承的成员 并且该类中定义的所有成员都是可访问的。”另一种说法 这是:
• 一个类继承所有实例字段和实例方法(但不是构造函数) 它的超类。
• 类的主体始终可以访问它声明的所有字段和方法 本身。它还可以访问从其继承的可访问字段和成员 超类。
因此,根据我的理解,我得出的结论是,子类从其超类继承了所有字段和方法(包括私有的),但不知何故,子类的主体无法访问私有(以及最终其他不可见的)成员超类。
如果我很好地理解了这本书的内容,这与 java 文档所说的——私有成员甚至没有被继承——不是矛盾吗? 还是我在看书的时候错过了什么?
【问题讨论】:
-
他们是。它们不能从子类访问,但它们确实是继承的。
-
“就像 java 文档所说,私有字段和方法永远不会被继承”你能说明你在哪里读到的吗?
-
嘿 csmckelvey 它来自“Java in a Nutshell”一书,第 6 版,第 1 部分第 3 章。虽然找不到 pdf 链接
-
您的“简而言之”书中的 sn-p(实际上是 Java 语言规范)正在以不同于我们某些/许多/大多数人直观预期的方式定义“继承”。他们将其与可访问性联系起来。私有成员保留在超类中;因为它不能被子类访问,它根据定义不被继承。
标签: java inheritance access-modifiers