2017-08-20 66 views
1

爲什麼一個子類,不能夠只使用自己的默認構造函數?當Bike擴展Vehicle類時,爲什麼Bike使用Vehicle的構造函數來創建自行車對象?子類是否總是使用超類的默認構造函數?

那自行車對象具有不父類存在,則採用了超一流的減少編寫額外的重複代碼來初始化一些額外的成員時,似乎還好用父母的類的構造函數。它看起來沒問題(可能是我完全錯了)。

public class Vehicle { 

    Vehicle() 
    { 

     System.out.println("Vehicle is created"); 

    } 
} 

public class Bike extends Vehicle { 

    public static void main(String[] args){ 

     Bike HondaBike = new Bike();  
    } 
} 

Output: Vehicle is created 
+0

您可以檢查,https://stackoverflow.com/questions/2967662/any-way-to-not-call-superclass-constructor-in-java。順便說一句:沒有辦法不調用父類的構造函數。子類應該包含父類的構造函數,並且如果需要的話,可以用其構造函數進行擴展。 – Oguz

+0

這就是java的工作方式。 – Heri

回答

1

new Bike()調用Bike類,它調用父類Vehicle的無參數的構造函數的參數的構造函數,但是因爲你沒有寫Bike類參數的構造函數,編譯器生成一個空的身體。因此,在你看來,只有Vehicle的構造函數被執行。

+0

@賺錢..這是我的問題。爲什麼需要調用超類的構造函數? – LearnJava

+0

@LearnJava因爲要初始化一個類的實例,你必須首先初始化屬於該類超類的所有屬性,這需要執行所有這些超類的構造函數。 – Eran

+0

@賺錢,你是否這麼認爲「兒子需要用父親的構造函數來創造自己的兒子」? – LearnJava

相關問題