是否总是使用在继承方法中调用的超类方法,即使覆盖了超类方法?

时间:2017-10-24 04:35:48

标签: java inheritance

假设我有两个班级, a b

public class a{
    public void m1(){
        System.out.println("a1");
    }
    public void m2(){
        m1();  //overridden in b
        System.out.println("a2");
    }
}

public class b extends a{
    public static void main(String[] args){
        b obj = new b();
        obj.m2();
    }
    public void m1(){
        System.out.println("b1");
    }
}

我很想知道是否有办法强迫 a m2() 始终致电 a m1(),而不是 b 或任何其他子类。我知道如果被 b 覆盖,super.m1()会调用 a m1(),但我担心这意味着m1()必须在每个子类中重写,超类本身无法调用m2()。我希望每次致电 a m2()来调用 a m1()内部,无论如何是否在 a ,像 b 这样的子类中调用了m1()或者没有覆盖m1()的子类。

我在这里发现了一些使用反射来做这样的事情,但听起来这些方法很昂贵。还有另一种,最好是更便宜的方式吗?

0 个答案:

没有答案