下面是我的代码。
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
?
答案 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关键字。