🎯

【Java】クラス解説30・superの使い方1

2024/02/04に公開

superの使い方1

superの使い方は、主に下記の3つがあげられます。

  1. サブクラスからスーパークラスのコンストラクタの呼び出し。
  2. サブクラスからスーパークラスのメソッドの呼び出し。
  3. サブクラスからスーパークラスのインスタンス変数へのアクセス。

1. スーパークラスのコンストラクタの呼び出しのコード例

public class Main {
    public static void main(String[] args) {
        // サブクラスのコンストラクタ呼び出し
        Fuzi f = new Fuzi();
    }
}

class MyClass {
    protected MyClass() {
        System.out.println("スーパークラスのコンストラクタ");
    }
}

class Fuzi extends MyClass {
    public Fuzi() {
        // サブクラスからスーパークラスのコンストラクタ呼び出し
        super(); // 出力結果 -> スーパークラスのコンストラクタ
    }
}

コード例解説

public class Main {
    public static void main(String[] args) {
        Fuzi f = new Fuzi();
    }
}

Mainクラスで、

  1. Fuziクラスのインスタンスを生成し、Fuziクラスのコンストラクタを呼び出します。

class MyClass {
    protected MyClass() {
        System.out.println("スーパークラスのコンストラクタ");
    }
}

スーパークラスのMyClassクラスで、

  1. コンストラクタを定義します。
  2. コンストラクタが呼び出されると、標準出力にスーパークラスのコンストラクタと出力されるようにします。

class Fuzi extends MyClass {
    public Fuzi() {
        super(); // 出力結果 -> スーパークラスのコンストラクタ
    }
}

スーパークラスを継承したFuziクラスで、

  1. コンストラクタを定義します。
  2. super()によりスーパークラスのコンストラクタを呼び出します。
    その結果、標準出力にスーパークラスのコンストラクタが出力されます。

2. スーパークラスのメソッドの呼び出しのコード例

public class Main {
    public static void main(String[] args) {
        Fuzi f = new Fuzi();
        // サブクラスのインスタンスからサブクラスのメソッドの呼び出し
        f.fPrint();
    }
}

class MyClass {
    protected void print() {
        System.out.println("スーパークラスのメソッド");
    }
}

class Fuzi extends MyClass {
    public void fPrint() {
        // サブクラスからスーパークラスのメソッドの呼び出し
        super.print(); // 出力結果 -> スーパークラスのメソッド
    }
}

コード例解説

public class Main {
    public static void main(String[] args) {
        Fuzi f = new Fuzi();
        f.fPrint();
    }
}

Mainクラスで、

  1. Fuziクラスのインスタンスを生成します。
  2. FuziクラスのインスタンスからFuziクラスのfPrintメソッドを呼び出します。

class MyClass {
    protected void print() {
        System.out.println("スーパークラスのメソッド");
    }
}

スーパークラスのMyClassクラスで、

  1. printメソッドを定義します。
  2. 処理内容を、標準出力にスーパークラスのメソッドと出力されるようにします。

class Fuzi extends MyClass {
    public void fPrint() {
        super.print(); // 出力結果 -> スーパークラスのメソッド
    }
}

スーパークラスを継承したFuziクラスで、

  1. fPrintメソッドを定義します。
  2. 処理内容を、superを使ってスーパークラスのprintメソッドを呼び出します。
    その結果、標準出力にスーパークラスのメソッドが出力されます。

3. スーパークラスのインスタンス変数へのアクセスのコード例

public class Main {
    public static void main(String[] args) {
        Fuzi f = new Fuzi("fuzi");
        f.print(); // 出力結果 -> スーパークラスのインスタンス変数 : fuzi
    }
}

class MyClass {
    // スーパークラスのインスタンス変数
    protected String value;
    
    // スーパークラスのコンストラクタ
    protected MyClass(String value) {
        this.value = value;
    }
}

class Fuzi extends MyClass {
    public Fuzi(String value) {
        // スーパークラスのコンストラクタ呼び出し
        super(value);
    }

    public void print() {
        // スーパークラスのインスタンス変数にアクセス
        System.out.println("スーパークラスのインスタンス変数 : " + super.value);
    }
}

コード例解説

public class Main {
    public static void main(String[] args) {
        Fuzi f = new Fuzi("fuzi");
        f.print(); // 出力結果 -> スーパークラスのインスタンス変数 : fuzi
    }
}

Mainクラスで、

  1. Fuziクラスのインスタンスを生成し、実引数で"fuzi"を渡すFuziクラスのコンストラクタを呼び出します。
  2. FuziクラスのインスタンスからFuziクラスのprintメソッドを呼び出します。

class MyClass {
    protected String value;
    
    protected MyClass(String value) {
        this.value = value;
    }
}

スーパークラスのMyClassクラスで、

  1. インスタンス変数valueを定義します。
  2. 仮引数valueを受け取るコンストラクタを定義して、
  3. インスタンス変数valueに、仮引数の値が代入された変数valueを代入します。

class Fuzi extends MyClass {
    public Fuzi(String value) {
        super(value);
    }

    public void print() {
        // スーパークラスのインスタンス変数にアクセス
        System.out.println("スーパークラスのインスタンス変数 : " + super.value);
    }
}

スーパークラスを継承したFuziクラスで、

  1. 仮引数valueが"fuzi"を受け取るコンストラクタを定義して、
  2. super()によりスーパークラスのコンストラクタを呼び出します。この時、実引数として"fuzi"を渡します。
  3. printメソッドを定義して、
  4. super.valueによりスーパークラスのインスタンス変数valueにアクセスし、標準出力に文字列スーパークラスのインスタンス変数 : に加えスーパークラスのインスタンス変数の値fuzi を出力します。

Discussion