こんにちは!ISAMU(@burlesca_isa)です!
今回の対象読者は
- javaの継承の勉強をしたい方
この記事を読むと
継承の基本
が分かります。
継承とは?
継承を使用することで、存在しているクラスを元に新たなクラスを定義することができます。
継承元のクラスのメンバを引き継いで、新たにクラスを定義することができます。
メンバを引き継ぐことで、冗長なプログラムになることを防ぐことができるため、
可読性が高まり、プログラムの修正などがしやすくなります。
継承の使用例
継承の具体例を見てみましょう。
例えば、顧客管理システムのプログラムを作成する際に
個人事業主クラスと企業クラスが定義されているとします。
個人事業主クラスと企業クラスのメンバ変数のidとnameが共通しています。
IDと顧客の名前は顧客管理であれば必ず必要な属性です。
重複するメンバをまとめて、顧客クラスを作成して顧客クラスのメンバ変数として管理することで、冗長化を防ぐことができます。
このとき、顧客クラスは継承元のクラスとなります。継承元のクラスをスーパークラスと呼びます。
継承先である個人事業主クラスと、企業クラスのことをサブクラスと呼びます。
既存のクラスを抽象化することで継承元クラスを作ることができる
既存のクラスを抽象化することで継承元クラスを作成できます。
今回例にあげたのは個人事業主クラスと企業クラスですが、
抽象化すると顧客です。
抽象化した最上位の概念である顧客をスーパークラスとしました。
もう1つ例をあげると、猫クラスや犬クラスがあるとします。
猫や犬を抽象化すると動物と考える事もできます。
動物クラスをスーパークラスとして、猫クラスや犬クラスに継承する事も考えられます。
抽象化の答えは1つではありませんので、システムに合った抽象化を行う必要があります。
犬と猫を抽象化してペットと考えてペットクラスをスーパークラスとして考えることもできます。
メンバに名前や生年月日などを宣言して犬クラスや猫クラスに継承することができます。
継承の構文
[アクセス修飾子] class クラス名 extends スーパークラス名{}
サブクラスを定義する際はクラス名の後にextendsキーワードを記述します。
サンプルコード
16行目でスーパークラスの顧客クラスを定義しています。
29行目でサブクラスの個人事業主クラスを定義しています。
今回は顧客クラスを継承したいため、extendsの後ろに Kokyakuと記載しています。
スーパークラスのコンストラクタは継承できない
スーパークラスのコンストラクタは継承できません。
スーパークラスのコンストラクタを使用する場合にはsuperキーワードを使用します。
superキーワードは自オブジェクトからみたスーパークラスのオブジェクトを表現する際に使用します。
superを使用すれば、メソッドの呼び出しなども行うことができます。
今回はコンストラクタを指定したいので、32行目でsuperを使用しています。
サブクラスのコンストラクタで受け取る引数の最初の2つはスーパークラス用に取得する引数です。
サブクラスのコンストラクタで受け取った引数をsuperキーワードの引数で渡すことで、
スーパークラスのコンストラクタに渡されます。