很多小伙伴都认为父类的私有成员在子类中访问不到,所以误认为父类中的私有成员是不可以被继承的。今天遇到了同样的问题,特意花了点时间研究了一下。下面请看源码
首先定义一个父类,父类中提供一个私有属性a和私有方法show(),再提供两个公有的方法分别获取私有变量a和访问私有方法show()。
父类
public class Fu {
private int a;
public Fu() {
}
public Fu(int a) {
this.a = a;
}
private void show () {
System.out.println("父类私有方法");
}
public void getShow() {
show();
}
public int getA() {
return a;
}
}
子类
public class Zi extends Fu{
public Zi() {
}
public Zi(int a) {
super(a);
}
}
测试类
public class Test {
public static void main(String[] args) {
Zi zi = new Zi(2020);
System.out.println(zi.a);
zi.show();
}
}
当直接用子类对象调用私有属性和私有方法时会出现编译报错.
虽然子类可以继承父类的私有属性和方法,但是在子类中没有访问私有成员的权限因此我们可以通过公有方法getA()和getShow()去访问私有成员,代码如下
public class Test {
public static void main(String[] args) {
Zi zi = new Zi(2020);
System.out.println(zi.getA());
zi.getShow();
}
编译不会报错
运行结果如图
结论:假设父类的私有成员不能被子类继承,那么通过公有方法getA()和getShow()同样不能访问私有成员。因此父类的私有成员是可以被子类继承的