我四处寻找没有运气的解决方案,这就是我拥有的和我想要实现的目标
父类
public abstract class MyAbstractParentClass{
private String privateParentField;
protected String getPrivateParentField(){
return privateParentField;
}
public void setField(String value){
privateParentField = value;
}
}
儿童班
public class MyChlidClass extends MyAbstractParentClass{
@Override
public void setField(String value){
super.setField(value);
}
}
我正在尝试拨打MyChlidClass
的{{1}}方法,然后拨打setField
的{{1}}后跟;
MyAbstractParentClass
但是上面的代码只返回protected String getPrivateParentField()
中没有父类@Test
public void f(){
Method[] m = MyChlidClass.class.getDeclaredMethods();
for (Method method : m) {
System.out.println(method.getName());
}
}
的声明方法,我怎样才能访问受保护的方法?有任何想法吗?
提前非常感谢你:)
修改 这是感兴趣的人的最终解决方案
MyChlidClass
PS:有一些例外,您可以为它们捕获或添加抛出声明;
再次感谢您的帮助
答案 0 :(得分:6)
您可以通过调用
来获取超类方法MyChlidClass.class.getSuperclass().getDeclaredMethods();
答案 1 :(得分:1)
您可以在扩展课程时提高可见性。您无需更改MyChlidClass的代码,只需扩展它:
public class MyGrandChlidClass extends MyChlidClass{
@Override
public String getPrivateParentField(){
return super.getPrivateParentField();
}
}
@Test
public void f(){
MyGrandChlidClass myGrandChlidClass = new MyGrandChlidClass();
myGrandChlidClass.setField("hello");
System.out.println(myGrandChlidClass.getPrivateParentField());
}
答案 2 :(得分:1)
您无法直接从外部类访问受保护的方法。它只能从类或继承的类中访问。要从外部访问它,您必须在子类中创建一个调用父项的受保护方法的公共方法。
答案 3 :(得分:0)
在父类上使用getDeclaredMethods()
以获取有关父类的受保护方法的信息。