特徴
あるクラスをベースにして、新しいクラスを作るための仕組み。
継承のメリット
コードの重複を排除できること。例えば、Webアプリケーションとかであれば、エラー処理などどのコードでもお決まりな処理などは継承などで共通化したりします。
継承の使い方
下記のような図の継承をさせます。
親クラス
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class People { String name; //名前 int weight; //体重 String pc;//パソコン People(String name,int weight){ this.name = name; this.weight = weight; } //自己紹介 void selfIntroduction() { } } |
子クラス
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Japanese extends People { Japanese(String name,int weight){ super(name,weight); } void selfIntroduction() { System.out.println(name + "さんは日本人です。"); System.out.println("体重は、"+ weight + "kgです。"); } } |
継承させたクラスを呼び出す。
継承させたクラスを呼び出します。基本的には、子クラスを呼び出します。
1 2 3 4 5 6 7 8 |
public class Main { public static void main(String args[]) { Japanese taro = new Japanese("太郎",60); taro.selfIntroduction();; } } |
実行結果
継承の制約
継承ができないクラスがある。
下記のようにfinalがついたクラスは継承ができません。
1 2 3 |
public final class Book { //処理 } |
また、下記のようにfinalをつけたメソッドは、子クラスでオーバーライドすることができません。
1 2 3 4 5 6 7 8 9 10 |
public final class Book { private String name; //★子クラスでオーバーライドできない。 public final String getName() { return name; } } |
サブクラスに引き継がれないメンバがある。
privateをつけて宣言したフィールドや、メソッド
staticをつけて宣言されたメンバ
正しい継承関係
is-a(汎化→特化)になっている継承
「is-a」とは、「子クラスが、親クラスの一種になっている関係のこと」です。
例えば、「本クラス」を継承させて、「専門書クラス」を作るのであれば、「専門書クラスは、本クラスの一種である」といえ、is-a(汎化→特化)関係になっているといえるでしょう。
しかし、「物クラス」があって、「専門書クラス」を作るのであれば、何か違うような気がします。そういった、違和感がある場合は、後で誤解が発生する可能性があるので継承しない方が無難です。
継承の問題点
ただ、ただ、継承を使えばいいというわけではりません。
継承を使っていくといくつかの問題点が出てきます。
下記の記事で解説しています。
この記事へのコメントはありません。