Java Bronzeのコンストラクタ纏め

Java Bronzeのコンストラクタ纏め

Javaのコンストラクタを勉強する機会があったので纏めです。

オブジェクトをnewするとデフォルトコンストラクタが呼ばれます。デフォルトコンストラクタは引数なしコンストラクタのことを言います。

デフォルトコンストラクタはnewすると勝手に生成されるので、省略可能です。

デフォルトコンストラクタを省略して、引数ありコンストラクタを定義してみます。

引数ありコンストラクタを書くと、デフォルトコンストラクタは生成されなくなってしまい、上記はコンパイルエラーとなってしまいます。

この場合、デフォルトコンストラクタは明示的に定義する必要があります。この辺、Java Bronzeの問題で出てきました。

this()とsuper()

this()は自クラスのコンストラクタを呼び出すことができます。super()は親クラスのコンストラクタを呼び出すことができます。

this()とsuper()を同時に呼ぶことはできません。また、コンストラクタ内の先頭行に書かなくてはいけません。先頭行に書く、というのも問題で出てきました。

サブクラスのコンストラクタ内の先頭行ではsuper();が暗黙的に呼ばれる

サブクラスChildとスーパークラスParentがあるとします。この場合、Childクラスのコンストラクタ内の先頭行でsuper();が呼ばれます。

super();はスーパークラスのデフォルトコンストラクタになります。この際、スーパークラスに引数ありコンストラクタを記述していると、デフォルトコンストラクタは生成されなくなってしまうため、コンパイルエラーとなってしまいますので注意です。Java Bronzeはこのようなひっかけ問題が多かったです。

サブクラスのコンストラクタが呼ばれるのですが、先頭行にsuper();となるので、まずはスーパークラスのデフォルトコンストラクタが必ず呼ばれるわけです。

子クラスから親クラスのメソッドを呼び出したりする場合は、super.メソッド名()となり、super()ではない点も注意です。

ちなみに、this.メソッド名()でも親クラスのメソッド名が呼び出せます。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA