为什么在下面的代码中没有出现任何错误?

Har*_*hal 1 java abstract-class overriding

下面是我的代码。

public abstract class AbstractClass {

    public String publicMethod() {
        System.out.println("This is Public Method");
        return "This is Public Method";
    }

    abstract  public String abstractMethod();
}



public class ConcreteClass extends AbstractClass{

    @Override
    public String abstractMethod() {
        String str = "This is abstract method implementtation in ConcreteClass";
        System.out.println(str);
        return str;
    }

    public String abstractMethod(String string) {
        String str = "This is overloaded method abstractMethod in ConcreteClass";
        System.out.println(str);
        return str;
    }

    public String publicMethod() {
        System.out.println("This is Public Method in ConcreteClass");
        return "This is Public Method in ConcreteClass";
    }

}
Run Code Online (Sandbox Code Playgroud)

所以我public String publicMethod()在抽象类以及扩展该抽象类的类中都有方法。我也没有给出@Override注释。为什么没有给出错误?还是这种方法被覆盖还是publicMethod被忽略了?

Era*_*ran 5

@Override是可选的注释。如果您将此注释用于不会覆盖超类方法且未实现接口方法的方法,则编译器会给出错误消息。

但是,允许重写方法而不用该注释标记该方法(尽管使用该注释很有用,因为在您打算覆盖某个方法时,它会捕获错误,但会得到您打算覆盖错误的方法的签名)。

是的,您的子类的publicMethod()重写将覆盖同名的超类方法。