Java コンストラクタについて
こんにちは。
コンストラクタがイマイチわかってなかったので、学んだことを書きます。
コンストラクタとは
「オブジェクト生成時に呼ばれる処理」です。
構文と注意
[アクセス制御の修飾子] コンストラクタ名 ([引数型 引数名, ...]) [throw節] {
コンストラクタ本体
}
コンストラクタは、返り値を持たない。
コンストラクタ内にreturn文を書くとコンパイルエラーになります。
コンストラクタのオーバーロード
メソッドと同じようにコンストラクタもオーバーロード可能です。
引数の並びが異なるコンストラクタは標準クラスでもよく見かけることができます。
this呼び出しとsuper呼び出し
this呼び出し
コンストラクタから他のコンストラクタを呼ぶthis呼び出しという文法規則がある。
ex.)
class Book {
(フィールド宣言は省略)
Book (String title, String author) {
this.title = title;
this.author = author;
this.price = 1000;
}
Book (String title, String author, int price) {
this.title = title;
this.author = author;
this.price = price;
}
}
上記のような2つのコンストラクタがあった場合に、見てわかるように中身がほとんど同じになっています。
このようなものの共通処理をまとめる際に、this呼び出しを使うことができます。
this呼び出しでコンストラクタを共通化すると以下のようになります。
class Book {
(フィールド宣言は省略)
Book (String title, String author) {
this(title, author, 1000); // これで下記コンストラクタを呼ぶ。
}
Book (String title, String author, int price) {
this.title = title;
this.author = author;
this.price = price;
}
}
super呼び出し
これは、継承したクラスから継承元のコンストラクタを呼ぶ仕組みです。
注意
this呼び出しもsuper呼び出しも、コンストラクタ本体の最初の文でなければいけない。
また、コンストラクタ内で一度しか呼び出しできません。
デフォルトコンストラクタ
コンストラクタ宣言を1つも書かなかったクラスは、暗黙にコンストラクタが自動生成されます。
そのことをデフォルトコンストラクタといいます。
デフォルトコンストラクタは引数なし、かつ中身が(継承元のsuper呼び出し以外は)空です。
ただ、些細なことに気をつけないといけなくなる手間を考えるとデフォルトコンストラクタは一切使わないというのが現実解になります。
終わりに
コンストラクタもJavaを使う上では基礎なはずなので、きちんと理解しないといけないですね。。
読んでいただきありがとうございました。
参考にしたもの
パーフェクトJava