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

时间:2019-09-02 14:18:09

标签: java overriding abstract-class

下面是我的代码。

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

}

所以我在抽象类以及扩展该抽象类的类中都有public String publicMethod()方法。我也没有给@Override注解。为什么没有给出错误?还会重写此方法还是忽略publicMethod

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:3)

我引用了用oracle site编写的文档:

  

@Override注释会通知编译器该元素旨在覆盖超类中声明的元素。覆盖方法将在“接口和继承”中进行讨论。虽然在重写方法时不需要使用此注释,但它有助于防止错误。

这就是为什么您没有任何错误的原因。它是可选的,但建议使用。 ;)

答案 2 :(得分:0)

没有必要使用替代符号,并且程序中没有错误,如果添加主类,则可以看到程序的完整工作。喜欢:

import java.util.*;
import java.lang.*;
import java.io.*;

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

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

public class Main
    {
      public static void main (String[]args)
      {
        ConcreteClass c = new ConcreteClass ();
          c.abstractMethod ();
          c.publicMethod ();
      }

    }

这给出的输出为: 这是ConcreteClass中的抽象方法实现 这是ConcreteClass中的公共方法  并且如果您想调用抽象类的公用方法,则可以在ConcreteClass的public方法中使用super关键字。