如何直接从子类调用重写的超类方法

cro*_*wso -3 java oop

class a{
  public void foo(int a){
     System.out.println("super");
  }
}
class b extends a{
  public void foo(int a){
     System.out.println("sub");
  }
}
Run Code Online (Sandbox Code Playgroud)

这就是我编写代码来调用它的方式

a ob = new b(); 
ob.foo(7);
Run Code Online (Sandbox Code Playgroud)

但它调用子类方法?

Ste*_*n C 5

...但它调用子类方法

这是重写的全部要点......所以当你在一个实例上调用该方法的子类时,你得到了该方法的子类覆盖!

另一方面,子类本身可以在其超类中调用方法的重写版本:

class A {
    public void foo() {
        System.out.println("super");
    }
}

class B extends A {
    public void foo() {
        super.foo();  // call the overridden method
        System.out.println("sub");
    }
}
Run Code Online (Sandbox Code Playgroud)

...将打印

super
sub
Run Code Online (Sandbox Code Playgroud)

如果你打电话foo给一个B实例.


你们真的确定没有其他方法可以解决这个问题吗?

  1. 我不明白为什么你认为这是一个"问题".