Я искал решение без везения, вот что у меня есть и чего я пытаюсь достичьДоступ к защищенному методу родительского класса извне дочернего класса (с отражением или что-нибудь, что сработает)
родитель Класс
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
setField
, а затем называть MyAbstractParentClass
protected String getPrivateParentField()
послесловиями;
@Test
public void f(){
Method[] m = MyChlidClass.class.getDeclaredMethods();
for (Method method : m) {
System.out.println(method.getName());
}
}
Но этот код выше возвращается только декларировал методы MyChlidClass
без protected
тех родительского класса, то как я могу получить доступ к защищенному методу? есть идеи?
большое спасибо заранее :)
EDIT Вот окончательное решение для тех, кто заинтересован
MyChildClass child = new MyChildClass();
chlid.setField("FOO_BAR");
Method getPrivateParentField = child.getClass().getSuperclass().getDeclaredMethod("getPrivateParentField");
getPrivateParentField.setAccessible(true);
String result = (String) getPrivateParentField.invoke(child);
System.out.println((String)result); //prints out FOO_BAR
PS: Есть несколько исключений вы можете либо поймать или добавить бросками декларацию для них ;
еще раз спасибо за вашу помощь
Использование 'Override' без каких-либо расширений? И почему вы хотели бы переопределить метод setter? Разве это явно ничего не меняется? – Crazenezz
@Grazenezz: извините, я просто забыл написать расширения, и это всего лишь пример (достаточно простой), чтобы сделать то, что я хочу достичь, спасибо за указатель на ошибку :) – snajahi
@ K-SaMa какая структура пакета как ? пожалуйста, поделитесь этой информацией –