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

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

新人求教java小問題

public?class?Vehicle{
??public?int?site;
??public?void?test(){
????System.out.println("site:"+site);
????}
}//父類
public?class?Car?extends?Vehicle{
??public?int?site=5;
}//子類
public?static?void?main(String[]?args)?{
??Vehicle?v=new?Car();
??v.test();
}

想請問為什么這時候輸出的是 site:0

先實例化再賦值就不會這樣,那如果我就像讓它輸出我本身就賦好的值,這段程序該怎么改

正在回答

5 回答

public?static?void?main(String[]?args)?{

??Vehicle?v=new()?Car;

??v.test();

}

在主函數中你創建的是父類Vehicle 的對象,調用的是父類的方法,而在父類中site沒有賦值所以默認為0啊,

子類繼承父類的方法,首先在子類中把test方法寫上,然后再main方法中創建子類的實例,再去調用子類中的test方法就可以了。

1 回復 有任何疑惑可以回復我~
#1

yymooc

還有如果Vehicle v=new() Car;是你創建的對象的話,寫法也是錯誤的,創建父類應該是Vehicle v=new Vehicle();
2015-02-05 回復 有任何疑惑可以回復我~
#2

Agnoy 提問者 回復 yymooc

這個地方是筆誤... 受教了
2015-02-05 回復 有任何疑惑可以回復我~
#3

Agnoy 提問者

非常感謝!受教
2015-02-05 回復 有任何疑惑可以回復我~

因為你子類沒有重寫test()函數,如果你把父類的那個函數復制到子類中,


其他不做改變,那么結果就是子類的數值了。


其實老師說的重點不是這個,而是主要想說多態這個概念。


下面用例子解釋為什么視頻要用父類引用指向子類對象,也就是實現多態。


程序功能:當交通方式為空運時,輸出該交通方式可搭乘人數。


假設你不知道多態時,你會怎么完成以上功能。

/*/////////////////////////////////////////////////////*/

public class Main {


????public static void main(String[] args) {


???????? Transport transport;//Transport為交通工具父類

???? ????

?????????transport=new Car();//Car為子類

? ? ? ? ?

???? ????transport=new Boat();

? ? ? ??

???? ????transport=new Plane();

? ? ? ? ??

????

???? ????if(transport.getMeans().equals("airTransport")){?//getMean()得到交通方式


???? ????????System.out.println("numOfPeople:"+transport.getNum());


????????}

????}


}

/*////////////////////////////////////////////////////*/


以上代碼使用了多態。


即視頻里老師說的用父類的引用指向子類對象可以方便的實現該功能。


可是你如果不知道多態,就只能直接用子類引用指向子類對象即


Car car=new Car();Boat boat=new Boat();Plane plane=new Plane();


然后你要去怎么比較呢?難道寫三段


if(car.getMeans.equals("airTransport"))


if(boat.getMeans.equals("airTransport"))


if(plane.getMeans.equals("airTransport"))


才能判斷得出結果嗎?這也太麻煩了。


這時候多態的作用就體現出來了,父類引用會自動地指向不同子類對象,


自動調用各子類對象的重寫方法進行比較,這樣就方便多了。


現在可以體會到多態的作用了吧。


ps:自己的一點理解,有錯誤歡迎指出。





1 回復 有任何疑惑可以回復我~
#1

Agnoy 提問者

謝謝指教!
2015-02-12 回復 有任何疑惑可以回復我~
#2

MoreClass

父類引用子類對象時,對象的名字可以相同是么?
2015-03-30 回復 有任何疑惑可以回復我~
#3

羅英河 回復 MoreClass

對呀 父類引用指向子類對象時,引用的名字(就是你說的對象的名字)可以相同,不然的話,如果不相同,那不是還是要一個個寫出來,比如transport1,transport2,transport3, 這樣的話不就沒有多態效果了。
2015-04-18 回復 有任何疑惑可以回復我~

//父類

public class Vehicle {

public int site;

?public void test(){

? ?System.out.println("site:"+site);

? ?}

}

//子類

public class Car extends Vehicle {

public int site=5;

public void test(){

? ?System.out.println("site:"+site);

? ?}

}

//測試類

public class Intial {


public static void main(String[] args) {

// TODO Auto-generated method stub

Car car = new Car();

car.test();

}


}

要想輸出子類的site值,就要調用子類的方法,首先在main中創建子類的對象,如下:

Car car = new Car();

car.test();


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

Agnoy 提問者

謝謝了
2015-02-05 回復 有任何疑惑可以回復我~

可以再說清楚點嗎? ?謝謝

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

v.test(); ? //運行父類方法輸出父類值 ? ? ? ? ?

System.out.println(v.site); ? ?//運行實例化的子類方法,輸出子類變量值

1 回復 有任何疑惑可以回復我~
#1

有一種愛叫KNA

33232
2015-02-05 回復 有任何疑惑可以回復我~
#2

Agnoy 提問者

可以再說清楚點嗎? 謝謝
2015-02-05 回復 有任何疑惑可以回復我~

舉報

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

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

進入課程

新人求教java小問題

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

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

幫助反饋 APP下載

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

公眾號

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