// パッケージ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
内のAnotherClass
がmypackage1
内のMyClass
を継承しています。それにより、AnotherClass
からMyClass
のprotectedメソッドや変数にアクセスできます。
protected
修飾子は、同じパッケージ内であればアクセスが可能であり、さらにサブクラスからもアクセスが可能です。このため、AnotherClass
がMyClass
を継承していることで、mypackage2
内からmypackage1
のMyClass
のprotected
メンバーにアクセスできるようになります。