2017-08-20 8 views
1

なぜサブクラスは自分のデフォルトのコンストラクタだけを使用できないのですか? BikeがVehicleクラスを拡張するとき、なぜBikeが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/anyway-to-not-call-superclass-constructor-in-javaで確認できます。ところで、親のコンストラクタを呼び出さない方法はありません。子のクラスには親のコンストラクタが含まれている必要がある場合は、そのコンストラクタとともに拡張できます。 – Oguz

+0

これはJavaの仕組みです。 – Heri

答えて

1

new Bike()そのスーパークラスVehicleのパラメータなしのコンストラクタを呼び出すクラスBikeのパラメータなしのコンストラクタを呼び出していますが、クラスBikeためのパラメータなしのコンストラクタを書いていないため、コンパイラが生成しました1つは空のボディです。したがって、Vehicleのコンストラクタだけが実行されるように見えます。

+0

@ Aarn ..それは私の質問です。なぜスーパークラスのコンストラクタを呼び出す必要があるのですか? – LearnJava

+0

@ LearnJavaクラスのインスタンスを初期化するためには、そのクラスのスーパークラスに属するすべてのプロパティを最初に初期化する必要があります。これらのプロパティは、これらのスーパークラスのコンストラクタを実行する必要があります。 – Eran

+0

@Earn、 "息子は自分の息子を作るために父のコンストラクタを使う必要がある"と思いますか? – LearnJava

関連する問題