爲了理解向下轉換,我做了下面的代碼。在Java中再次向下執行父級構造函數?
class Vehicle{
protected int tyres=0;
protected String name="default";
Vehicle(){
}
Vehicle(String aname){
name=aname;
}
//abstract void setTyres(int number);
public void print(){
System.out.println(name+":"+tyres);
}
}
class TwoWheeler extends Vehicle{
TwoWheeler(){
tyres=2;
}
public void print(){
System.out.println(name+":"+tyres);
}
}
class FourWheeler extends Vehicle{
FourWheeler(){
tyres=4;
}
public void print(){
System.out.println(name+":"+tyres);
}
}
public class vehicles {
public static void main(String[] args) {
try{
Vehicle v= new Vehicle("Dummy");
v.print();
v= new TwoWheeler();
v.print();
}
catch(Exception e){
System.out.println(e.toString());
}
}
}
現在輸出 虛擬:0 默認:2
,而我預計虛擬:0假:2 看起來像父類的構造被稱爲第二次?請解釋這裏發生了什麼。 另外,如何在沒有調用父項的情況下執行向下轉換?
謝謝。瞭解。 :) – Sum