Javaの基本文法である継承について解説します。
継承とは
一般的な言葉として親から子への継承といった言葉を聞いたことがあると思います。親の技能などを子へ受け継ぐ場合などで利用されますね。
Javaにもこの継承という概念があり親が持つ機能を子へ受け継ぐことが可能です。
具体的にはクラスに親子関係を持たせて機能を継承させることができます。
子クラスのことをサブクラスということもあります。
継承方法
クラスを継承する方法は以下のようにクラス宣言にextendsキーワードを追加します。
public 子クラス名 extends 親クラス名 {
}
今回は説明用に以下2クラスを利用します。
クラス名 | 説明 |
---|---|
Parent | 親クラス |
Child | 子クラス |
Main | 実行用クラス |
◆Parent
public class Parent { public void showParent() { System.out.println("Call Parent"); } }
◆Child
public class Child extends Parent { public void showChild() { System.out.println("Call Child"); showParent(); //親クラスのメソッド呼び出し } }
◆Main
public class Main { public static void main(String[] args) { //子クラスをインスタンス化 Child child = new Child(); child.showParent(); //親クラスのメソッドを呼び出し child.showChild(); //子クラスのメソッドを呼び出し //親クラスをインスタンス化することももちろん出来ます Parent parent = new Parent(); parent.showParent(); } }
◆実行結果
Call Parent
Call Child
Call Parent
Call Parent
継承を利用すると子クラスには定義されてないメソッドを利用できることがわかりました。
継承とアクセス修飾子
子クラスから呼び出せるものはアクセス修飾子によって異なります。
アクセス修飾子とは下記を指します。
アクセス修飾子 | 説明 |
---|---|
public | すべて参照可能 |
protected | 同一パッケージ内(又はサブクラス)であれば参照可能 |
(省略) | 同一パッケージ内のサブクラスであれば参照可能 |
private | サブクラスからは参照不可 |
終わりに
今回はメソッドの継承を説明しましたが、他にもプロパティやコンストラクタの継承も可能です。ただし、メソッドの継承を利用するシーンが多いので今回はメソッドの継承に絞り説明をしました。
継承の使われ方として一番多いのが基本機能を親クラスに持たせて、差分を子クラスに持たせる方法です。
子クラスは複数あり一部の機能は子クラスごとに異なる機能である必要があるが、共通的な基本機能は親クラスに持たせてしまうことで、修正があっても変更が局所化しているため修正も楽にできます。
また、そのほかには今後解説するオーバーライドも一緒に利用されることが多いです。
ただし継承は階層が深くなると今度は逆にソースが読みにくくなる場合もあるので階層はある程度でとどめたほうが良いでしょう。