🧁 本文介绍了Java如何访问通过子类对象访问父类的私有变量
🍔 分别介绍了继承本质、super初始化、get和set方法
🌭 文中还包括方便理解的相关例子
📘如何访问父类私有变量
📙继承的本质
🍿 在讨论如何访问父类私有变量之前,有必要明确类成员继承的本质,下面是继承的堆内存图:
🥨 我们可以看到在创建子类对象时,实际上可以理解为内部有个父类对象,但实际上并没有创建这个父类对象。这时候私有变量只能在父类对象中被访问,子类无法通过<对象.a>访问私有变量。
🧈 我们发现在父类和子类对象中都有this指针,而且两者不同都指向各自对象。我们可以考虑利用父类中的this指针就可以访问到私有变量a了。
📙super初始化
🍞 super()方法的作用是调用父类的构造方法。
🍗 可以利用super()方法去初始化从父类继承的私有变量。
父类
class Father{
private int a;
//带参数的构造方法
public Father(int a){
this.a = a;
}
}
子类
class Children{
//带参数的构造方法
public Children(int a){
super(a);//会调用Father类中的带参数构造方法
}
}
主方法
public class Test{
public static void main(String[] args){
Children children = new Children(10);//会将a初始化10
}
}
通过这种方式就能够初始化私有变量a,但对于获取a的值就要用到下面的get和set方法。
📙get和set方法
🍟 get和set的方法是属性对外封装的访问方法。
父类
class Father{
private int a;
public void setA(){
this.a = a;
}
public int getA(){
return this.a;
}
}
子类
class Children{}
主方法
public class Test{
public static void main(String[] args){
Children children = new Children();//会将a初始化10
children.setA(10);
System.out.println(children.getA());
}
}
结果:10
📙总结
如果要访问父类的私有变量,归根结底就是要找到指向父类的this指针。