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

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

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

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

【问题讨论】:

    标签: java class inheritance


    【解决方案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 的值。
    猜你喜欢
    • 2011-09-26
    • 2020-09-04
    • 2020-09-01
    • 2013-02-12
    • 2015-01-21
    • 2011-02-10
    • 2013-08-30
    • 1970-01-01
    相关资源
    最近更新 更多