Поскольку вы переопределили m2()
в B
, то единственный способ заставить A.m2()
работать вместо B.m2()
- это вызвать super.m2()
внутри B.m2()
.
Даже если вы звоните super.m1();
в B.m3()
, вызов this.m2()
в A.m1()
все равно приведет к запуску переопределенного B.m2()
.
Если вы не хотитечтобы иметь super.m2()
внутри B.m2()
(или не хотеть этого во всех случаях), тогда единственная альтернатива - создать другой метод, который вы не переопределите в B
(и вызвать его из A.m1()
-возможно, вам придется изменить или создать еще одну A.m1()
):
public static class A {
public String m1(){ //you may need a different method to call from B.m3()
return this.anotherM2();
}
public String m2(){
return "A.m2() called";
}
public String anotherM2() {
return "A.m2() called";
}
}