为什么我在下面的代码中没有收到任何错误?
Why I am not getting any error in below code?
下面是我的代码。
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()
抽象方法 class 以及 class 扩展那个抽象 class。我也没有给出 @Override
注释。为什么没有报错?此方法是否也被覆盖或 publicMethod
被忽略?
@Override
是可选注释。如果您将此注释用于未覆盖 super-class 方法且未实现接口方法的方法,编译器会给出错误。
但是,允许覆盖一个方法而不用该注释标记它(尽管使用该注释很有用,因为当您打算覆盖一个方法但获得您想要的方法的签名时它可以捕获错误覆盖错误)。
是的,您的子class的publicMethod()
覆盖了同名的超级class方法。
我引用的是 oracle 的 site:
中编写的文档
@Override annotation informs the compiler that the element is meant to override an element declared in a superclass. Overriding methods will be discussed in Interfaces and Inheritance. While it is not required to use this annotation when overriding a method, it helps to prevent errors.
这就是您没有收到任何错误的原因。它是可选的,但推荐使用。 ;)
没有必要使用重写符号,而且程序中没有错误,如果您添加一个main class,您可以看到程序的完整工作。喜欢:
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 中的抽象方法实现
这是 Public ConcreteClass 中的方法
如果您想调用抽象 CLASS PUBLICMETHOD,那么您可以在 ConcreteClass 的 public 方法中使用 super 关键字。
下面是我的代码。
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()
抽象方法 class 以及 class 扩展那个抽象 class。我也没有给出 @Override
注释。为什么没有报错?此方法是否也被覆盖或 publicMethod
被忽略?
@Override
是可选注释。如果您将此注释用于未覆盖 super-class 方法且未实现接口方法的方法,编译器会给出错误。
但是,允许覆盖一个方法而不用该注释标记它(尽管使用该注释很有用,因为当您打算覆盖一个方法但获得您想要的方法的签名时它可以捕获错误覆盖错误)。
是的,您的子class的publicMethod()
覆盖了同名的超级class方法。
我引用的是 oracle 的 site:
中编写的文档@Override annotation informs the compiler that the element is meant to override an element declared in a superclass. Overriding methods will be discussed in Interfaces and Inheritance. While it is not required to use this annotation when overriding a method, it helps to prevent errors.
这就是您没有收到任何错误的原因。它是可选的,但推荐使用。 ;)
没有必要使用重写符号,而且程序中没有错误,如果您添加一个main class,您可以看到程序的完整工作。喜欢:
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 中的抽象方法实现 这是 Public ConcreteClass 中的方法 如果您想调用抽象 CLASS PUBLICMETHOD,那么您可以在 ConcreteClass 的 public 方法中使用 super 关键字。