//rename A#m() to k() -> must rename all m() package p; abstract class Abstract { public abstract void m(); void caller(Abstract abstr, A a, Interface inter, Impl2 impl2) { abstr.m(); a.m(); inter.m(); impl2.m(); } } class A extends Abstract { public void m() { // from Abstract } } interface Interface { //independent of Abstract void m(); } class Impl2 extends Abstract implements Interface { public void m() { // from Abstract AND from Interface } }