[Примечание: приведенный ниже код не был скомпилирован, но должен разобраться в этом]
Я должен повторить - чего вы пытаетесь достичь?
Если вы хотите, чтобы суперкласс вызывал определенный набор методов, определенных в подклассе, вы можете сделать несколько вещей.
С отражением , я бы рекомендовал использовать аннотации:
1) определить аннотацию HeySuperclassCallMe (убедитесь, что срок хранения равен RUNTIME)
2) комментируйте методы для вызова с HeySuperclassCallMe
@HeySuperclassCallMe public void foo...
3) в вашем суперклассе сделайте что-то вроде
for (Method m : getClass().getMethods())
if (m.getAnnotation(HeySuperclassCallMe.class) != null)
m.invoke(...)
Это хороший рефлексивный способ сделать это.
Для без отражения (что должно быть немного быстрее, но больше кода):
1) определить интерфейс, который представляет вызовы
public interface Call {
void go();
}
2) в вашем суперклассе определите
private List<Call> calls
protected void addCall(Call call)
3) в подклассе используйте addCall:
addCall(new Call() {public void go() {foo();}} );
4) в суперклассе
for (Call call : calls)
call.go();