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

Java 如何直接从子类调用重写的超类方法,java,oop,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"); } } 但是它调用子类方法 。。。但是它调用子类方法 这就是凌驾于。。。因此,当您在子类实例上调用该方法时,您将得到该方法的子类重写 另一方面,子类本身可以在其

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

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);
。。。哪个会打印

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");
    }
}
如果在
B
实例上调用
foo



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

  • 我不明白你为什么认为这是一个“问题”

  • 这是最重要的。重写的方法不能从类外部访问。但是您可以在子类本身中调用它。要从子类中的
    调用
    super
    类方法,您可以使用
    super
    关键字。可能重复:你们真的确定没有其他方法可以绕过这个问题吗?恐怕在java中没有办法禁用
    多态性
    ,它是java语言和JVM的固有特性,JVM是java的尖塔之一,它严重依赖于JVM。
    super
    sub