「Java言語」の「継承」の仕組みと作り方
今回は「継承」の仕組みを学んでいきたいと思います。
クラス間に「親子関係」を作ることができるとのことで、他のプログラミング言語でも学んだのですが、内容を全部忘れているので、また学びなおしていきたいと思います。
忘れていることが多すぎてほとんど学びなおしな日々です(^^;)
継承
今回ご説明する「継承」の「テーマとなるクラス」は「エアコン(AirConditioner)」にしました。
クラスの親子関係のイメージは、
のようになります。
「親」となるクラスは、「AirConditioner」クラスで、このクラスは「エアコン」自体はを表す汎用的なクラスです。
「子」となるクラスは、「AirPurifierConditioner」クラスで、このクラスは「空気清浄エアコン」を表すクラスです。
「Java」では、「親のクラス」は「スーパークラス」、「子のクラス」は「サブクラス」と呼んでいます。
「AirConditioner」クラスを作ってみると、
public class AirConditioner{ private String name; //製品名 private String maker; //メーカー private int weight; //重量 private int powerConsumption; //消費電力 //コンストラクタ public AirConditioner( String name, String maker, int weight, int powerConsumption) { this.name = name; this.maker = maker; this.weight = weight; this.powerConsumption = powerConsumption; } }
のようになります。
「AirPurifierConditioner」クラスは、
public class AirPurifierConditioner extends AirConditioner { private boolean airPurifier = false; //空気清浄モード private boolean autoAIController = false; //AI自動制御モード //コンストラクタ public AirPurifierConditioner( String name, String maker, int weight, int powerConsumption, boolean airPurifier, boolean autoAIController) { super(name, maker, weight, powerConsumption); this.airPurifier = airPurifier; this.autoAIController = autoAIController; } //空気清浄モードの設定 public void setAirPurifier(boolean setValue) { this.airPurifier = setValue; } //AI自動制御モードの設定 public void setAutoAIController(boolean setValue) { this.autoAIController = setValue; } }
今回、「ゲッター・セッター」は・・・割愛しました(^^;)
「継承」で「親子関係」を作ると「親クラス」のメソッドやフィールドを「子クラス」が使うことができるようになります。
ただし、「private」キーワードの「フィールド」と「メソッド」は子クラスで利用することができないらしい。
この辺の仕組みがよくわかってないので、あとで勉強していきたいと思います。
他のエアコンも作ってみたいと思いますが今回は「除菌機能付きエアコン」を作ってみたいと思います。
public class RemovingBacteriaAirConditioner extends AirConditioner { private boolean removingBacteria = false; //除菌モード //コンストラクタ public RemovingBacteriaAirConditioner( String name, String maker, int weight, int powerConsumption, boolean removingBacteria) { super(name, maker, weight, powerConsumption); this.removingBacteria = removingBacteria; } //除菌モードの設定 public void setEemovingBacteria(boolean removingBacteria) { this.removingBacteria = removingBacteria; } }
空気中の「バクテリア(菌)」を取り除いてくれるエアコンです。(買いたい・・・)
このクラスも「AirConditioner」クラスを継承しています。
クラスの関係を整理してみると、
のようになります。
もし、「継承」を利用しなければ、「全てのクラス」に、
- name
- maker
- weight
- powerConsumption
などのフィールドを用意しないといけなくなってしまいます。
重複している「フィールド・メソッド」を「親クラス」に書くことで、プログラムの重複を無くすことができます。
「継承」は複数のクラス階層にわたって作ることもできます。
以前に学んだ「継承」の仕組みも少しずつ思い出してきたので、いろいろなクラスを作って「継承」が使いこなせるように練習していきたいと思います。