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

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

?為什么子類this.seat和super.seat的輸出值是一樣的呢?

為什么子類this.seat和super.seat的輸出值是一樣的呢?
package?com.imooc3;
public?class?Bus?{
?int?seat;//座位數
?float?price;
?public?void?showSeat(){
??this.seat=47;
??System.out.println("Bus的座位數為:"+seat);
?}
?public?Bus(int?seat){
??System.out.println("父類的構造方法");
??this.seat=seat;
?}
package?com.imooc3;
public?class?Car?extends?Bus?{
?public?void?showSeat(){?//方法重寫
??System.out.println("父類的Bus的座位數為"+super.seat);
??int?seat=4;
??System.out.println("子類car的座位數為"+this.seat);?????????????//為什么用this.seat和super.seat輸出的值是一樣的呢
??System.out.println("父類的Bus的座位數為"+super.seat);
?}
?public?Car(int?seat){?//帶參構造方法
??super(seat);
??System.out.println("子類的構造方法");
?}
}
package?com.imooc3;
public?class?Test?{
public?static?void?main(String[]?args)?{
??//?TODO?Auto-generated?method?stub
??Car?honda=new?Car(55);
??honda.showSeat();

?}
}
最后結果是:
父類的構造方法
子類的構造方法
父類的Bus的座位數為55
子類car的座位數為55
父類的Bus的座位數為55

正在回答

4 回答

我覺得是對象實例化的時候將55覆蓋了子類默認的seat=4.就好像我先定義 int seat=4;之后我再讓seat=55,是可以的,這時候seat=55,因為變量是可以改變值的,常量就不可以。

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

你的程序我看了,也運行了。這么和解釋吧,在創建子類對象時即Car?honda=new?Car(55); 程序首先會訪問和執行父類的屬性和構造方法,然后再訪問和執行子類的屬性和構造方法,這是我們初始化訪問你的順序,在這之后我們的參數55就傳給了父類中的屬性seat,父類構造方法中this.seat=seat;就完成了這一步。接著運行到?honda.showSeat();系統默認會調用子類中的showSeat方法,看好你問的問題來了

public?void?showSeat(){?//方法重寫

System.out.println("父類的Bus的座位數為"+super.seat);//這里訪問的是父類屬性seat=55

??int?seat=4;//問題的關鍵在這里:這里的seat是你定義在showSeat中的一個局部變量,和你父類屬性是兩個不同的變量,只是同名而已,所以你這里的定義和賦值是不會傳到父類屬性的seat中的,父類屬性seat還是55。

??System.out.println("子類car的座位數為"+this.seat); ? ? //這里的this.seat代表的是當前對象Car里的seat屬性,由于你沒有在Car中定義屬性seat,則默認繼承f父類中的seat=55

??System.out.println("父類的Bus的座位數為"+super.seat);

?}

你不如在加上一個System.out.println(seat);驗證

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

那this。seat調用的是父類的seat嗎?

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

new car的時候先調用父類的構造方法并把值賦值給父類的seat屬性了。


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

舉報

0/150
提交
取消

?為什么子類this.seat和super.seat的輸出值是一樣的呢?

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

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

幫助反饋 APP下載

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

公眾號

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