※前回の講座がまだの人はこちらから
【Java入門⑨】メソッド ~初心者でも安心!基礎から学べるプログラミング講座~
継承
クラスには、継承という機能があり、基のクラスの機能や資源を引き継いで、他クラスで拡充することができます。
継承とは?
具体的には、あるクラスで作成した変数やメソッドを引き継いだクラスを作成でき、引き継いだクラスでは、継承元の変数やメソッドが自由に使えます。
継承元のクラス(引き継がれるクラス)を親クラス、またはスーパークラスと言います。
逆に、継承して作成したクラス(引き継ぐクラス)を子クラス、またはサブクラスと言います。
例えば、消防車を作りたいとします。消防車は車の機能にプラスで「火を消す」機能を付けたいです。
元々、車を作成するための車クラスが存在するので、車クラスを継承した消防車クラスを作成することで、消防車の作成が容易になります。
継承の使い方
子クラスの作成
継承のやり方はクラス名の後ろにextendsを付けて、継承したいクラスを指定します。
クラス名 extends 継承したいクラス名 {
}
<使用例>
public class FireEngine extends Car { //消火用水量を表すメンバ変数water private int water; //消火用水量を出力する public int getWater() { return water; } //消火用水量を入力する public void setWater(int water) { this.water = water; } //getメソッドを使い、それぞれのメンバ変数を表示 //(親クラスのshowメソッドを呼び出し、かつshowメソッドをオーバーライド) public void show() { super.show(); System.out.println("消火用水量" + getWater()); } }
また、親クラスの変数やメソッドを子クラスで上書きして再定義することができます。
このことをオーバーライドと言います。子クラスで親クラスと同じ変数名やメソッド名を定義することで、その変数やメソッドはオーバーライドされます。
さらに、親クラスの変数やメソッドを子クラスで使うことができます。
super.変数名
super.メソッド名
オーバーライドしたメソッド内では、親クラスのメソッドをsuperで呼び出し、子クラスで行いたい処理を追記する形が良く使われています。
子クラスの使用
FireEngineクラス(Carクラスを継承した子クラス)を使ってみます。
使い方自体は親クラスでも子クラスでも変わりません。
<使用例>
public class FireEngineApp { public static void main(String[] args) { Car car1 = new Car(); Car car2 = new Car(); //FireEngineクラスをfireEngine1という名称でインスタンス化 FireEngine fireEngine1 = new FireEngine(); car1.setModel("車1号"); car1.setHeight(1400); car1.setWidth(1600); car1.setFuel(90); car2.setModel("車2号"); car2.setHeight(1900); car2.setWidth(1800); car2.setFuel(100); //各setメソッドを使い、fireEngine1のメンバ変数へ代入 fireEngine1.setModel("消防車"); fireEngine1.setHeight(2500); fireEngine1.setWidth(2000); fireEngine1.setFuel(200); fireEngine1.setWater(500); car1.show(); car2.show(); //fireEngine1の詳細を表示 fireEngine1.show(); } }
<実行結果>
「fireEngine1.setModel()〜fireEngine1.setFuel()」は、親クラス(Carクラス)のメソッドが呼び出されています。
「fireEngine1.setWater()」は、子クラス(FireEngineクラス)のメソッドが呼び出されています。
この様に、継承を行うことで、子クラスで親クラスのメソッドを自由に使うことができます。
まとめ
継承ができると機能の拡張などがやりやすくなります。
さらに、「Aクラスを継承したBクラスを継承したCクラス」といった継承の継承もできるので、気になる方は試してみてください。
次回講座:インタフェース
【Java入門⑪】インタフェース ~初心者でも安心!基礎から学べるプログラミング講座~