继承中成员变量的访问特点
当类之间产生了关系后,其中各类中的成员变量,有产生了哪些影响呢?
成员变量不重名
如果子类父类中出现不重名的成员变量,这时的访问是没有影响的。
成员变量重名时
创建子类对象时,访问有两种方式:
直接通过子类对象访问成员变量:
等号左边是谁,就优先用谁,没有则向上找。
间接通过成员方法访问成员变量:
该方法属于谁,就优先用谁,没有则向上找。
代码示例:
public class Fu {
int numFu = 10;
int num = 100;
public void methodFu() {
System.out.println(num);
}
}
public class Zi extends Fu{
int numZi = 20;
int num = 200;
public void methodZi(){
System.out.println(num);
}
}
public class Demo01ExtendsField {
public static void main(String[] args) {
Fu fu = new Fu();
System.out.println(fu.numFu); // 10
System.out.println("================");
Zi zi = new Zi();
System.out.println(zi.numFu); // 10
System.out.println(zi.numZi); // 20
System.out.println("================");
// 等号左边是谁,就优先用谁
System.out.println(zi.num); // 优先子类, 200
// System.out.println(zi.abc); // 到处都没有,编译报错!
System.out.println("================");
// 这个方法是子类的,优先用子类的,没有再向上找
zi.methodZi(); // 200
// 这个方法是在父类中定义的,
zi.methodFu(); // 100
}
}
子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要用super
关键字,修饰父类成员变量,类似于之前学过的this
。
class Zi extends Fu {
// Zi中的成员变量
int num = 6;
public void show() {
// 访问父类中的num
System.out.println("Fu num=" + super.num);
// 访问子类中的num
System.out.println("Zi num=" + this.num);
}
}
小贴士:Fu类中的成员变量是非私有的,子类中可以直接访问。若Fu类中的成员变量私有了,子类是不能直接访问的。通常编码时,我们遵循封装的原则,使用private修饰成员变量,那么如何访问父类的私有成员变量呢?可以在父类中提供公共的getXxx方法和setXxx方法。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!