私には2つのクラスがあります:
public abstract class AbstractTestClass {
private String abstractString = "abstract";
public void showFields() throws IllegalAccessException{
for (Field field : this.getClass().getDeclaredFields()) {
System.out.println(field.get(this));
}
}
}
public class TestClass extends AbstractTestClass {
private String concreteString = "concreteString";
}
そしてテスト:
public class MainTest {
public static void main(String[] args) throws IllegalAccessException{
TestClass test = new TestClass();
test.showFields();
}
}
このテストを実行すると、次の例外が発生します。
java.lang.IllegalAccessException: Class AbstractTestClass can not access a member of class TestClass with modifiers "private"
コードをデバッグしているとき、これにはTestClassのインスタンスが含まれています。
質問:
- なぜそれが起こるのですか?
- Field.setAccessible()を使用したり、ファイルの可視性を変更したりせずに、このコードを機能させるにはどうすればよいですか?