Zi類繼承Fu類,結果應該輸出6不應該是7啊,求大神解答。
class Fu{
int x=7;
int y=2;
public void a(){
System.out.println(this.x);
}
}
class Zi extends Fu{
int x=6;
}
public class a122 {
public static void main(String[] args){
Zi zi=new Zi();
zi.a();
}
}
這個很好理解,因為你的方法a是從父類繼承過來的,最終調用的是父類的方法,雖然你的子類與父類有同名的成員變量x,但是本質上子類是有兩個x的,一個指向自己的x,另一個執行父類的x,然後調用a方法時,由於a是父類的方法,所以在父類方法中訪問的變量是父類的值。
如果你要輸出7,就要重新a方法,輸出子類自己的成員變量x。
class Zi extends Fu{
int x = 6;
public void a() {
System.out.println(this.x);
}
}
子類和父類有相同的成員變量時,輸出到底是誰的取決於調用的是誰的方法。如果子類重寫了a()那麼輸出的就是子類的x。