【はじめてのJava】デフォルトコンストラクタ【クラスの継承編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
クラスの継承編
クラスの継承編では、Javaを扱う上で重要な「クラスの継承」について扱っていきます。
前回まででthisの使い方やsuperによるメソッド呼び出しを扱いました。
ここからはsuperを利用したコンストラクタの呼び出し方について扱います。
今回はコンストラクタの動き方を把握するために重要なデフォルトコンストラクタについて扱います。
目次
デフォルトコンストラクタ
デフォルトコンストラクタとは、 自動生成されるコンストラクタ です。
一体どういうことでしょうか。
インスタンス化の際の動き
ここで改めて、インスタンス化の時の動きを考えます。
インスタンス化の際には コンストラクタによるオブジェクトの初期化が必ず起こります 。
つまり すべてのクラスはコンストラクタがないとインスタンス化できません 。
ここで一つ疑問が湧いてきます。それは「コンストラクタを定義していない場合どうなるのか」ということです。
実はこの時に出てくるのがデフォルトコンストラクタです。
コンストラクタがない場合の動き方
実はJavaの場合、 コンストラクタが定義されていないときは自動的に引数と処理内容がないコンストラクタが生成されます 。
この、自動生成される引数と処理内容がないコンストラクタのことを デフォルトコンストラクタ と言います。
今までコンストラクタを書いていなくてもインスタンス化ができてたのは、このデフォルトコンストラクタが自動的に生成されていたためです。
例
例えば、以下のようにコンストラクタが定義されていないShipクラスがあったとします。
class Ship{ double speed; }
このShipクラスは、コンパイルする際にコンパイラによって自動的にデフォルトコンストラクタが付与され以下のソースコードと同じ状態になってからコンパイルされます。
class Ship{ double speed; Ship(){ } }
このように、デフォルトコンストラクタがあることによってコンストラクタを定義していなくてもインスタンス化ができるようになっているのです。
まとめ
・コンストラクタを定義しなかった場合はコンパイラによって自動的に引数と処理内容がないコンストラクタが付与される
次回
次回はクラスの継承があるときのインスタンス化について考えます。
はじめてのJavaシリーズの目次はこちら
クラスの継承編はこちら