クラスの継承とは
継承とは、親クラス(スーパークラス)を基に子クラス(サブクラス)を作成することで共通処理を引き継ぎながらも、子クラス独自の処理を記述するための機能のことです。継承を使えるようになると、何度も同じようなプログラムを書く必要がなく、作業の効率化、ソースコード全体を見やすくさせることができます。
Javaクラスの継承方法
継承する場合にはクラス宣言のあとに「extends」を付け継承元とする親クラス名を指定します。ただし、Javaの継承元とするクラスは1つだけです。2つのクラスを同時に継承することはできないようになっています(多重継承の禁止)。
class クラス名 extends 元となるクラス名 {
親クラスとの「差分」メンバ
}
継承したクラスのメソッドやコンストラクタを使用する場合には、「super」を使用してアクセス・参照します。
class クラス名 extends 元となるクラス名(引数) {
// 親クラスのコンストラクタの呼び出し
super(引数);
// 親インスタンス部分のメソッドを呼び出す
super.メソッド名(引数);
}
メソッドのオーバーライド
オーバーライドとは親クラスで定義したメソッドの内容を上書きすることです。親クラスで定義されているメソッドの中身を、少し変えて使いたい場合に使用されます。
オーバーライドの条件は、メソッド名、戻り値、引数が同じであることです。
【親クラス】
public void output() {
System.out.println("継承");
}
【子クラス】
public void output() {
System.out.println("オーバーライド");
}
親クラス(スーパークラス)を再利用しつつも、変えたいメソッドは自由に変えられるので、便利なオーバーライドですが、使用する上で守らなければならない決まり事がいくつかあります。まず、親クラス(スーパークラス)側のメソッドにfinal修飾子が付与されている場合は、子クラス(サブクラス)でそのメソッドのオーバーライドはできません。また、スーパークラス内のprivate修飾子の付いた変数やメソッドはサブクラスから利用できないことにも気を付ける必要があります。
オーバーロードとの違い
オーバーライドと似たような用語でオーバーロードがあります。よく間違われるので、簡単に説明しておきます。
オーバーロードとはクラス内に「同じ名称のメソッド」を複数宣言することです。
オーバーロードの条件は、➀メソッド名が同じである事 ➁引数の型や数、並び順が異なることです。
public void output() {}
public void output(String str) {}
public void output(String str, int i) {}
public void output(int i, String str) {}
まとめ
クラスの継承を使うことで、子クラスでは親クラスのメンバ変数やメンバメソッドを改めて記述する必要がなくなります。そうすることで、コードも読みやすくなり後々の修正やメンテナンスがしやすくなります。