新人求教java小問(wèn)題
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(); }
想請(qǐng)問(wèn)為什么這時(shí)候輸出的是 site:0
先實(shí)例化再賦值就不會(huì)這樣,那如果我就像讓它輸出我本身就賦好的值,這段程序該怎么改
2015-02-05
public?static?void?main(String[]?args)?{
??Vehicle?v=new()?Car;
??v.test();
}
在主函數(shù)中你創(chuàng)建的是父類Vehicle 的對(duì)象,調(diào)用的是父類的方法,而在父類中site沒有賦值所以默認(rèn)為0啊,
子類繼承父類的方法,首先在子類中把test方法寫上,然后再main方法中創(chuàng)建子類的實(shí)例,再去調(diào)用子類中的test方法就可以了。
2015-02-10
因?yàn)槟阕宇悰]有重寫test()函數(shù),如果你把父類的那個(gè)函數(shù)復(fù)制到子類中,
其他不做改變,那么結(jié)果就是子類的數(shù)值了。
其實(shí)老師說(shuō)的重點(diǎn)不是這個(gè),而是主要想說(shuō)多態(tài)這個(gè)概念。
下面用例子解釋為什么視頻要用父類引用指向子類對(duì)象,也就是實(shí)現(xiàn)多態(tài)。
程序功能:當(dāng)交通方式為空運(yùn)時(shí),輸出該交通方式可搭乘人數(shù)。
假設(shè)你不知道多態(tài)時(shí),你會(huì)怎么完成以上功能。
/*/////////////////////////////////////////////////////*/
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());
????????}
????}
}
/*////////////////////////////////////////////////////*/
以上代碼使用了多態(tài)。
即視頻里老師說(shuō)的用父類的引用指向子類對(duì)象可以方便的實(shí)現(xiàn)該功能。
可是你如果不知道多態(tài),就只能直接用子類引用指向子類對(duì)象即
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"))
才能判斷得出結(jié)果嗎?這也太麻煩了。
這時(shí)候多態(tài)的作用就體現(xiàn)出來(lái)了,父類引用會(huì)自動(dòng)地指向不同子類對(duì)象,
自動(dòng)調(diào)用各子類對(duì)象的重寫方法進(jìn)行比較,這樣就方便多了。
現(xiàn)在可以體會(huì)到多態(tài)的作用了吧。
ps:自己的一點(diǎn)理解,有錯(cuò)誤歡迎指出。
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);
? ?}
}
//測(cè)試類
public class Intial {
public static void main(String[] args) {
// TODO Auto-generated method stub
Car car = new Car();
car.test();
}
}
要想輸出子類的site值,就要調(diào)用子類的方法,首先在main中創(chuàng)建子類的對(duì)象,如下:
Car car = new Car();
car.test();
2015-02-05
可以再說(shuō)清楚點(diǎn)嗎? ?謝謝
2015-02-05
v.test(); ? //運(yùn)行父類方法輸出父類值 ? ? ? ? ?
System.out.println(v.site); ? ?//運(yùn)行實(shí)例化的子類方法,輸出子類變量值