继承 Java 私有成员

Posted

技术标签:

【中文标题】继承 Java 私有成员【英文标题】:Inheritance Java private members 【发布时间】:2018-05-11 19:52:31 【问题描述】:

我一直在经历java中的继承。我的问题是,如果私有成员没有被继承,它们怎么会在内存中结束。是否在内部发生了一些事情来解决这个问题,或者它们只是隐藏/无法访问,没有父类的公共成员函数。

这里是 java 文档 "子类不继承其父类的私有成员。但是,如果超类具有访问其私有字段的公共或受保护方法,则子类也可以使用这些方法。

嵌套类可以访问其封闭类的所有私有成员——包括字段和方法。因此,子类继承的公共或受保护的嵌套类可以间接访问超类的所有私有成员。”

【问题讨论】:

【参考方案1】:

您的对象中有 Class 引用。您的对象的 Class 中有父 Class 引用。这就是私有方法仍在内存中的原因——它们被父类引用。

它们通常无法访问,您可以使用例如Method.setAccessible()。您可以通过对父 Class 的反射获得 Method

【讨论】:

即使我得出结论,但“不继承私有成员”对我来说似乎是错误的。【参考方案2】:

它们在内存中,但您没有访问权

例子:

class A

    private int foo;

    public int getFoo( )  return foo; 

    ...


class B extends A

   ...

实际上,B 类的每个实例都包含一个整数foo

但是,您不能直接访问它,因为它被声明为private。您可以通过getFoo 方法间接访问它,因为那个是public

【讨论】:

A 类 private int foo; A( ) 打印 foo; ... class B extends A ... 即使这两个成员都没有被继承,也会打印 foo 的值。

以上是关于继承 Java 私有成员的主要内容,如果未能解决你的问题,请参考以下文章

Java继承中的私有成员

java中字段继承问题--子类不能继承父类的私有成员

继承的基本概念: Java不支持多继承,也就是说子类至多只能有一个父类。 子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 子类中定义的成员变量和父类中

私有成员变量可以被子类继承吗

06JAVA基础面向对象-继承/多态

06JAVA基础面向对象-继承/多态