-3
class a{
  public void foo(int a){
     System.out.println("super");
  }
}
class b extends a{
  public void foo(int a){
     System.out.println("sub");
  }
}

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

a ob = new b(); 
ob.foo(7);

但它调用子类方法?

4

1 回答 1

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");
    }
}

...这将打印

super
sub

如果你调用foo一个B实例。


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

  1. 是的
  2. 我不明白你为什么认为这是一个“问题”。
于 2012-06-17T03:45:46.970 回答