亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于java里的父類引用子類

public class Initial {
public static void main(String [] agr){
Base a=new Sub();
a.print();
System.out.println(a.nums);
}
}

public class Base {
public int nums=10;
public void print(){
System.out.println("這里是Base的方法");
}
public Base(){
this.nums=50;
}
}
public class Sub extends Base {
public int nums;
public int ages;
public void print(){
System.out.println("這里是Sub的方法");
}
public Sub(){
this.nums=100;
this.ages=10;
??? System.out.println("這里是sub構造方法")
}
}

為什么最后nums的值是base類中的,不應該是sub類中的100么
如果說this是值當前對象,那在sub的構造方法里的this.nums=100,不應該是base類中的nums么,可是最后的結果是basr類里的nums=50

正在回答

3 回答

這是因為你在Sub類重新定義了一個新的成員變量nums,你試試在sub類中將public int nums;注釋掉,結果就正常了。這里涉及到兩個類中同名變量的問題,即使兩個類中變量名相同,但任然認為這是兩個不同量。而且Sub已經繼承了Base類的成員變量,你完全沒必要再在Sub類中進行聲明。

0 回復 有任何疑惑可以回復我~

我也是初學,先不說代碼的設計意圖,純粹讀代碼但是我覺得這個應該就是base中的初值,也就是0。如果你想讓他成為100,那么sub構造方法應該是靜態的,這樣才會加載為100的初值。你的代碼有語法錯誤,我試試改改,驗證下我的猜想。

0 回復 有任何疑惑可以回復我~

如果訪問父類的屬性,應該使用super關鍵字,比如super.nums

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Java入門第二季 升級版
  • 參與學習       531142    人
  • 解答問題       6326    個

課程升級!以終為始告別枯燥,在開發和重構中體會Java面向對象編程的奧妙

進入課程

關于java里的父類引用子類

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號