當(dāng)子類覆蓋父類的成員變量時(shí)愤炸,父類方法使用的是父類的成員變量墩剖,子類方法使用的是子類的成員變量。 這個聽起來很容易理解的一回事,但是實(shí)際使用過程中很多人容易搞混:尤其是在多態(tài)的時(shí)候画饥,調(diào)用一個被繼承的方法,該方法訪問是一個被覆蓋的成員m浊猾,那么方法中到底是訪問了父類的成員還是子類的成員m抖甘?結(jié)論是,若實(shí)際調(diào)用的是父類的方法葫慎,就使用了父類的該成員m,若實(shí)際調(diào)用的是子類的方法衔彻,就使用子類的成員m,記住一句偷办,每個類使用成員在前面都隱含著一個this指針:A.this.member
class SuperClass {
private int number;
public SuperClass() {
this.number = 0;
}
public SuperClass(int number) {
this.number = number;
}
public int getNumber() {
number++;
return number;
}
}
class SubClass1 extends SuperClass {
public SubClass1(int number) {
super(number);
}
}
class SubClass2 extends SuperClass {
private int number;
public SubClass2(int number) {
super(number);
}
}
public class SubClass3 extends SuperClass {
private int number;
public SubClass3(int number) {
super(number);
}
public int getNumber() {
number++;
return number;
}
public static void main(String[] args) {
SuperClass s1 = new SubClass1(20);
SuperClass s2 = new SubClass2(20);
SuperClass s3 = new SubClass3(20);
System.out.println(s1.getNumber());
System.out.println(s2.getNumber());
System.out.println(s3.getNumber());
//結(jié)論一:多態(tài)時(shí)艰额,當(dāng)子類覆蓋了父類的方法,使用子類覆蓋 的方法
//結(jié)論二:當(dāng)子類覆蓋父類的成員變量時(shí)椒涯,父類方法使用的是 父類的成員變量柄沮,子類方法使用的是子類的成員變量
}
}
執(zhí)行輸出:
21
21
1