ハイ、前回はサブクラスを作ってやるところまでやりました
今回はサブクラスのコンストラクタから・・・
Student型のオブジェクトは継承により引き継いだMemberクラスのメンバとStudentクラスで新規作成したメンバを接合した形です。なので、オブジェクトの初期化も2弾に分けて行います。
sutudent型の上段がMenberクラスから継承したメンバ。
ただし、Memberクラスでprivateアクセスになってるフィールド変数の
id や name は存在しますがアクセスできません。
アクセスできるのはMemberクラスのメンバだけだからです。
Student クラスで、id や name が必要な時はアクセスメソッド、
getId() getName() を使用。
アクセスできないメンバは存在しても「継承した」とは言えない。
なので、privateアクセスのメンバは「継承していないメンバ」 というわけです。
で、id や name を初期化する方法ですが・・・
Java言語の規約だと、 サブクラスのコンストラクタは、最初にスーパークラスのコンストラクタを実行しなければならない、 と決められている・・・
スーパクラスのコンストラクタを利用して初期化するというわけですwww
やり方は次のように
super(id,name); //スーパークラスのコンストラクタ呼び出し
Studentクラスのコンストラクタでは、最初に super() を使って継承した部分を初期化し、新規に追加した変数の初期化を行う。
なので、Studentクラスのコンストラクタは次のようになっています。
public Student (int id, String name, String studentId){ //コンストラクタ
super(id,name); ←スーパークラスのコンストラクタを呼び出す
this.studentId = studentId;
}
super(・・・)コンストラクタの先頭行(1行目)に書かないとコンパイルエラーになります。また、スーパークラスのコンストラクタを呼び出すのは、絶対的な規則。
super(・・・)を書かなかった場合でも引数のないsuper();を書いたとみなされる。
これにより、スーパークラスの引数のないコンストラクタが自動的に呼び出されます。
ここまでご覧いただきありがとうございました。
次回は継承の効果を確かめるところから。
BYマんタ
参考書は__________________________________
川場 隆 Kawaba Takashi
秀和システム
______________________________________