Java 为什么我在下面的代码中没有得到任何错误?
下面是我的代码Java 为什么我在下面的代码中没有得到任何错误?,java,overriding,abstract-class,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 Conc
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";
}
}
因此,我在abtract类和扩展该抽象类的类中都有
公共字符串publicMethod()
方法。此外,我还没有给出@Override
注释。为什么没有给出错误?此外,此方法是否正在重写,或者是否忽略了publicMethod?@Override
是可选的注释。如果将此注释用于未重写超类方法且未实现接口方法的方法,编译器将给出错误
但是,允许重写方法,而不使用该注释对其进行标记(尽管使用该注释很有用,因为当您打算重写方法但得到了您打算重写的方法的签名时,它可能会捕获错误)
是的,您的子类的
publicMethod()
重写同名的超类方法。@Override
是可选的注释。如果将此注释用于未重写超类方法且未实现接口方法的方法,编译器将给出错误
但是,允许重写方法,而不使用该注释对其进行标记(尽管使用该注释很有用,因为当您打算重写方法但得到了您打算重写的方法的签名时,它可能会捕获错误)
是的,您的子类的
publicMethod()
覆盖了同名的超类方法。我引用的是oracle的文档:
@重写注释通知编译器该元素将重写在超类中声明的元素。重写方法将在接口和继承中讨论。虽然重写方法时不需要使用此注释,但它有助于防止错误
这就是为什么你没有得到任何错误。这是可选的,但建议使用。;) 我引用的是oracle的文档: @重写注释通知编译器该元素将重写在超类中声明的元素。重写方法将在接口和继承中讨论。虽然重写方法时不需要使用此注释,但它有助于防止错误
这就是为什么你没有得到任何错误。这是可选的,但建议使用。;) 不需要使用覆盖符号,而且程序中没有错误。如果添加一个主类,您可以看到程序的完整运行。比如:
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中的公共方法
如果你想调用抽象类PUBLICMETHOD,那么你可以在ConcreteClass的public方法中使用super关键字。你不需要使用覆盖符号,而且在程序中没有错误。如果你添加一个主类,你可以看到程序的完整工作。比如:
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中的公共方法
如果要调用抽象类PUBLICMETHOD,则可以在ConcreteClass的public方法中使用super关键字。
@Override
不是必需的,它仍在被重写。第二个方法重载而不是重写,因为参数使其具有不同的签名。在Java@Override
中,Override有两个目的:1)自行记录哪些方法属于父类2)确保避免错误(例如,您认为该方法属于父类/可以重写,但您错了),但这两个目的都只是为了“用户友好性”编译器不需要。在其他语言(如Kotlin)中,必须始终声明重写。@Harshal可能有些人认为您的问题是基本的,您懒得在提问之前不查阅文档。一些SO用户希望您在提问之前“做好功课”。@Override
不是必需的,它仍在被重写。第二个方法重载而不是重写,因为参数使其具有不同的签名。在Java@Override
中,Override有两个目的:1)自行记录哪些方法属于父类2)确保避免错误(例如,您认为该方法属于父类/可以重写,但您错了),但这两个目的都只是为了“用户友好性”编译器不需要。在其他语言(如Kotlin)中,必须始终声明重写。@Harshal可能有些人认为您的问题是基本的,您懒得在提问之前不查阅文档。一些SO用户希望您在提问之前“做好功课”。有关此批注的更多信息:有关此批注的更多信息: