第5章 オーバーロードとコンストラクタ (Java)
コンストラクタ
- オブジェクトの初期化を行う
- new がオブジェクトの作成後、必ず呼び出される。
- クラスと完全に同じ名前でなければならない。
- 戻り値がない(voidも書かない)
- コンストラクタは、オブジェクトに取り込まれない。
- 定義されていない時のみ、デフォルトコンストラクタが暗黙の内に作成される。
- デフォルトコンストラクタには引数がない。
- コンストラクタを作成するとデフォルトコンストラクタは作成されなくなる。
- コンストラクタはオーバーロード(多重定義)できる。
- コンストラクタと同名のメソッドを作ることもできる。
デフォルトコンストラクタ
コンストラクタを定義していないとき、コンパイラが暗黙の内に作成する見えないコンストラクタがデフォルトコンストラクタである。
デフォルトコンストラクタには常に引数がない。
デフォルトコンストラクタの形
public コンストラクタ名(){
super();
}
デフォルトコンストラクタのアクセス修飾子 は、クラスのアクセス修飾子と同じである。
コンストラクタのオーバーロード
コンストラクタを複数定義することをコンストラクタのオーバーロード(多重定義)という。
引数の構成(数、型の種類、並び順など)が異なれば。コンストラクタをいくつでも作成できる。
引数の名前を変えたたけではオーバーロードにならない。
アクセス修飾子を変えただけでは、オーバーロードにならない。
thisキーワード
- thisはオブジェクト自身の参照である。
- すべてのオブジェクトがthisを持つ。
- this.メンバ名という形で使用できる。
- return this; の様に参照として単体でも使用できる。
- コンストラクタやインスタンスメソッドなどの中で使用できる。
- クラスメソッドの中で使用するとコンパイルエラーになる。
見えないところでコンパイラは、すべてのフィールド変数にthisをつける。
プログラマがフィールド変数にthisをつけるのはコンパイラの作業を助けるためである。
thisは実行時にはオブジェクトの参照に置き換えられる。
あるクラスのコンストラクタはメモリ上に一つだけ存在し、そのたった一つのコンストラクタがヒープに作成されるいくつものオブジェクトの初期化を担当する。
その歳、個々のオブジェクトを識別するためにオブジェクトの参照が必要なのである。
this()によるコンストラクタの呼び出し
- コンストラクタでは、this()を使って他のコンストラクタを呼び出せる。
- this()はコンストラクタの最初の行で書かなければならない。(コンパイルエラーになる)
- this()はメソッドでは使えない
メソッドのオーバーロード
- オーバロードするには引数の構成を変えなければならない。
- 戻り値型やアクセス修飾子はどのよう変えてもよい
(戻り値型やアクセス修飾子が違うだけでは、オーバーロードにならない。→コンパイルエラーになる) - クラスメソッドもインスタンスメソッドもオーバーロードできる。