プログラミングライフスタイル

「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」クラスを継承しています。

クラスの関係を整理してみると、

継承2

のようになります。

もし、「継承」を利用しなければ、「全てのクラス」に、

  • name
  • maker
  • weight
  • powerConsumption

などのフィールドを用意しないといけなくなってしまいます。

重複している「フィールド・メソッド」を「親クラス」に書くことで、プログラムの重複を無くすことができます。

「継承」は複数のクラス階層にわたって作ることもできます。

以前に学んだ「継承」の仕組みも少しずつ思い出してきたので、いろいろなクラスを作って「継承」が使いこなせるように練習していきたいと思います。

→(前へ)「Java言語」の「コンストラクタ」の仕組み

→(次へ)「Java言語」の「抽象クラス」の仕組み

HOMEへ