mdr141
6/6/2018 - 6:30 AM

Javaサブクラスのコンストラクタ

OBJ:extends, super

// スーパークラスMechatroを継承
class Mate extends Mechatro {
  Mate(String name, String color) {
    // スーパークラスのコンストラクタに引数を渡す
    super(name, color);
    System.out.println("サブクラスのコンストラクタです");
  }
}
// スーパークラスMechatroを継承
class Wego extends Mechatro {
  // スーパークラスにはないサブクラス独自のフィールド
  private int power = 50;

  Wego(String name, String color) {
    // スーパークラスのコンストラクタに引数を渡す
    super(name, color);
    System.out.println("サブクラスのコンストラクタです");
  }

  // メソッドのオーバーライド
  public void printData() {
    // スーパークラスのprintData()メソッドを呼び出し
    super.printData();
    // スーパークラスにはないサブクラス独自の処理
    System.out.println("ぱわー: " + this.power);
  }
}
// スーパークラスMechatro
class Mechatro {
  // privateだとサブクラスからアクセスできないのでprotected
  protected String name;
  protected String color;

  // コンストラクタでnameとcolorの値をセットする
  Mechatro(String name, String color) {
    this.name = name;
    this.color = color;
    System.out.println("スーパークラスのコンストラクタです");
  }

  public void printData() {
    System.out.println("なまえ: " + this.name);
    System.out.println("いろ: " + this.color);
  }
}
class Main {
  public static void main(String[] args) {
    // インスタンスを生成し、変数に代入
    Wego wego1 = new Wego("びびっと", "黄");
    Mate mate1 = new Mate("あいぼりー", "薄クリーム"));

    // スーパークラスのインスタンスメソッドを呼び出す
    wego1.printData();

    // スーパークラスのインスタンスメソッドを呼び出す
    mate1.printData();

  }
}
◆サブクラスでコンストラクタを定義する
お約束:コンストラクタの先頭で、スーパークラスのコンストラクタを呼びだす。
super:「super()」でスーパークラスのコンストラクタを呼び出す
(注意1)
スーパークラスにprivateで定義されているフィールドは、サブクラスから直接アクセスできない。
ゲッターで値を取得をするか、privateではなくprotectedで定義する。
◆protected:宣言したスーパークラス内と、サブクラス内からもアクセスできる。

◇◇◇実行結果◇◇◇
スーパークラスのコンストラクタです
サブクラスのコンストラクタです
スーパークラスのコンストラクタです
サブクラスのコンストラクタです
なまえ: びびっと
いろ: 黄
ぱわー: 50
なまえ: あいぼりー
いろ: 薄クリーム