Java重写方法

Mic*_*ael 2 java inheritance

我在Java重写方面有点困惑.假设我们有以下继承:

class A{
    public A(){    
    }

    void show(){
        System.out.println("SuperClass");
    }
}

class B extends A{

    @Override
    void show(){
        System.out.println("SubClass");
    }

}

public class Test {

    public static void main(String[] args) {
      B b = new B();
      b.show();
    }  
}
Run Code Online (Sandbox Code Playgroud)

显然,class B覆盖了show()class A.继承的方法.为什么不b.show();打印消息System.out.println("SuperClass");,因为class B现在的方法show()来自class A

谢谢.

Era*_*ran 14

showB类的方法会覆盖A类的show方法而不会调用它,因此System.out.println("SuperClass");当您调用showB的实例时没有理由执行它.

如果您将B类更改为:

class B extends A 
{
    @Override
    void show(){
        super.show ();
        System.out.println("SubClass");
    }
}
Run Code Online (Sandbox Code Playgroud)

调用showB的实例也将执行Ashow方法的逻辑.