サブクラスのコンストラクタの定義をするときにsuper()メソッドを使うときはどういうときですか?また、どうしてsuper()メソッドを使って、スーパークラスのインスタンスを作成しないといけないのですか?教えてください。

A 回答 (2件)

親クラスで使われるコンストラクタが、


引数(パラメータ)のないコンストラクタの場合、
super();は、自動的に呼ばれるので、呼びだす必要はありません。

引数のあるコンストラクタの場合、
superを呼びだしてパラメータを渡してやる必要があります。

たとえば、class Aのコンストラクタが「名前・年齢」の引数を持っているとします。
/*コンストラクタ*/
public A(String name, int age){
...
}

サブクラスBで、「性別」も指定したい場合、
親クラスのコンストラクタを呼びだしてバラメータを渡してやる必要があります。
/*Bのコンストラクタ*/
public B(String name, int age, boolean sex){
super(name, age);
...
/*変数sexの処理はここでやる*/
...
}
    • good
    • 0

サブクラスはスーパークラスを継承しているのですから、


スーパークラスの持っているものはすべて持っているわけで、
当然、スーパークラスがコンストラクタで行っている初期化処理は
サブクラスでもやらなければならない、ということです。
サブクラスは、スーパークラスの資産を使わせてもらっているだけに
スーパークラスの意向に従わなくてはいけないのです。

super()はスーパークラスのインスタンスを作っているわけではなくて、
スーパークラスのコンストラクタというメソッドを呼んでいるだけです。
No.1の方の回答にあるように、スーパークラスのコンストラクタが
引数なしであれば、super();と書かなくても暗黙のうちに呼ばれています。
コンストラクタに引数があると、どれを呼ぶのか明示的に書かないとわからないので
super(xxx);と書かなければなりません。
つまり、スーパークラスのコンストラクタを呼ばないときはあり得ないということです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング