Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我在下面的代码中没有得到任何错误?_Java_Overriding_Abstract Class - Fatal编程技术网

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用户希望您在提问之前“做好功课”。有关此批注的更多信息:有关此批注的更多信息: