java 子类有没有继承父类的私有属性和私有方法呢_

java 子类有没有继承父类的私有属性和私有方法呢?


一个小Demo如下:

class Fu {
    //父类的两个私有属性
    private int a = 1;
    private int b = 2;
    //父类的一个私有方法
    private void haha() {
        System.out.println("a=" + a);
    }

    void sop() {
        haha();
        System.out.println("b=" + b);
    }
}

class Zi extends Fu {
}

public class Test {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.sop();
        /*
        父类的sop()方法是可以编译运行的,并且打印结果
        为:
            a=1
            b=1
        */
    }
}

我们根据测试结果就可以明白,如果子类没有继承父类的私有属性和私有方法,那么父类的sop方法肯定不可以使用。所以目前可以得出一个简单的结论那就是子类是可以继承父类所有的东西的,只是对于private等修饰符对外不可见,所以修饰跟继承没有关系,只是影响属性或者方法对外是否可见 。


对于这一问题,Java官方文档也有解释:

Java官方文档的解释:“A subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.”

Java官方文档的解释:子类不能继承父类的私有属性,但是如果子类中公有的方法影响到了父类私有属性,那么私有属性是能够被子类使用的。

我个人还是比较赞同这个说法的,比如上面的例子,如果在子类中直接用父类的私有属性和方法,那么肯定是报错的,但是使用父类的sop()方法,却可以成功,很好的匹配了官方文档解释。突然想到一篇博客里举的生活中的例子来说,我们不可能完全继承父母的一切(如性格等),但是父母的一些无法继承的东西却仍会深刻的影响着我们。也是比较契合官方文档解释的。


当然上面我把看到博文加上自己理解简单的做了个记录,下面是我觉得很好的个总结,大家可以去看看获得一些启发和思考:
知乎:java中子类有没有继承父类的私有变量?-Robin的回答部分

你可能感兴趣的:(java知识)