
「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
などのフィールドを用意しないといけなくなってしまいます。
重複している「フィールド・メソッド」を「親クラス」に書くことで、プログラムの重複を無くすことができます。
「継承」は複数のクラス階層にわたって作ることもできます。
以前に学んだ「継承」の仕組みも少しずつ思い出してきたので、いろいろなクラスを作って「継承」が使いこなせるように練習していきたいと思います。