// パッケージ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メンバーにアクセスできるようになります。


