014 継承(protected修飾子) 019 解答例

// パッケージmypackage1内のMyClass.java

package mypackage1;

// MyClassクラスを定義
public class MyClass {
    // protectedなメソッド
    protected void myProtectedMethod() {
        System.out.println("This is a protected method.");
    }

    // protectedな変数
    protected int myProtectedVariable = 42;

    // コンストラクタ
    protected MyClass() {
        System.out.println("MyClass constructor called.");
    }
}
// パッケージmypackage2内の別のクラス

package mypackage2;

import mypackage1.MyClass;

// mypackage1のMyClassを継承したクラス
public class AnotherClass extends MyClass {
    public static void main(String[] args) {
        // myProtectedMethodにアクセス
        new AnotherClass().invokeProtectedMethod();

        // myProtectedVariableにアクセス
        new AnotherClass().accessProtectedVariable();

        // protectedコンストラクタにアクセス
        new AnotherClass().createInstance();
    }

    // protectedメソッドを呼び出すメソッド
    public void invokeProtectedMethod() {
        myProtectedMethod();
    }

    // protected変数にアクセスするメソッド
    public void accessProtectedVariable() {
        System.out.println("Protected Variable: " + myProtectedVariable);
    }

    // protectedコンストラクタを呼び出すメソッド
    public void createInstance() {
        MyClass instance = new MyClass();
        System.out.println("Instance created.");
    }
}

この例では、mypackage2内のAnotherClassmypackage1内のMyClassを継承しています。それにより、AnotherClassからMyClassのprotectedメソッドや変数にアクセスできます。

protected修飾子は、同じパッケージ内であればアクセスが可能であり、さらにサブクラスからもアクセスが可能です。このため、AnotherClassMyClassを継承していることで、mypackage2内からmypackage1MyClassprotectedメンバーにアクセスできるようになります。

「014 継承」問題集リスト