新人求教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
先實例化再賦值就不會這樣,那如果我就像讓它輸出我本身就賦好的值,這段程序該怎么改
2015-02-05
public?static?void?main(String[]?args)?{
??Vehicle?v=new()?Car;
??v.test();
}
在主函數中你創建的是父類Vehicle 的對象,調用的是父類的方法,而在父類中site沒有賦值所以默認為0啊,
子類繼承父類的方法,首先在子類中把test方法寫上,然后再main方法中創建子類的實例,再去調用子類中的test方法就可以了。
2015-02-10
因為你子類沒有重寫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:自己的一點理解,有錯誤歡迎指出。
2015-02-05
//父類
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();
2015-02-05
可以再說清楚點嗎? ?謝謝
2015-02-05
v.test(); ? //運行父類方法輸出父類值 ? ? ? ? ?
System.out.println(v.site); ? ?//運行實例化的子類方法,輸出子類變量值