private修饰符指定只能在自己的类中访问该成员.但我能够使用从基类继承的公共方法来访问它.有人能解释一下为什么吗?这是否意味着Child类的对象包含一个名为b的成员?
这是代码:
package a;
public class Base {
private int b;
public int getB() {
return b;
}
public void exposeB() {
System.out.println(getB());
}
public Base(int b) {
this.b = b;
}
}
package b;
public class Child extends Base {
Child(int b) {
super(b);
}
public static void main(String args[]) {
Child b = new Child(2);
// Prints 2
System.out.println("Accessing private base variable" + b.getB());
}
}
解决方法:
您没有直接访问超类中的私有变量.您正在实施Encapsulation的概念.您正在使用公共getter方法(在本例中为getB())来使您的私有数据被其他类加入.因此,您可以通过公共getter访问私有变量b,但是您永远不能从另一个/子类直接访问其实例
标签:java,oop,inheritance
来源: https://codeday.me/bug/20190723/1511674.html