Java中父类的私有变量和方法不被子类继承
如何理解父类的私有变量和方法不被子类继承呢?
首先看代码如下:
public class Test {
public static void main(String[] args) {
Son s1 = new Son();//创建一个子类对象
System.out.println("子类的name = "+s1.getName()); // 第一次获取子类的name
System.out.println("-----------------");
s1.setName("小强");
System.out.println("子类的name = "+s1.getName()); // 第二次获取子类的name
}
}
class Father {
private String name = "父类";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Son extends Father {
}
打印结果:
子类的name = 父类
-----------------
子类的name = 小强
结论:虽然说父类的私有方法和变量不被子类继承,但是子类中确实调用到了name这个变量。
怎么解释呢?可以理解为父类的变量和方法全部被子类继承(拥有),但是其中私有方法和变量不被子类看见(无权访问),所以导致子类直接调用不了继承过来的父类的私有变量和方法。那么,怎么访问呢?子类找到父类中能够访问该私有变量和方法的公共方法就可以。
比如,举个不太恰当的例子啊(个人理解,方便记忆)。A爸拥有一个密码箱,里面装满了钱,当A继承过来的时候呢(拥有),A爸没把密码告诉A,A知道有钱但是取不了(无权访问)。A要取钱做生意了,A得告诉A爸,“我需要钱了”,然后A爸私下打开密码箱,取出钱给A后,再锁上密码箱。当A做生意赚了钱存入钱时,A把钱给A爸,A爸私下打开密码箱,存入钱,然后锁上密码箱。
从内存角度来理解:父类的一切都被子类继承过来(包括私有),也即是子类拥有了一个完整的父类对象。子类对象所引用的内存有父类变量的一份拷贝。但是针对私有变量和方法呢,子类对象无法方法,只能通过父类对子类对象开放的方法调用父类的私有变量和方法。此处参考:https://www.cnblogs.com/aademeng/articles/6191691.html