Во время моего исследования аналогичного случая я в конечном итоге проверил трассировку стека в методе подкласса, чтобы выяснить, откуда поступил вызов. Возможно, есть более разумные способы сделать это, но у меня это получается, и это динамичный подход.
public void method2(){
Exception ex=new Exception();
StackTraceElement[] ste=ex.getStackTrace();
if(ste[1].getClassName().equals(this.getClass().getSuperclass().getName())){
super.method2();
}
else{
//subclass method2 code
}
}
Я думаю, что вопрос о том, чтобы найти решение по делу, является разумным. Конечно, есть способы решить проблему с разными именами методов или даже с разными типами параметров, как уже упоминалось в теме, но в моем случае я не хотел бы путать с разными именами методов.