我再次研究了一些OOP概念,所以我编写了这个简单的代码,只是为了查看覆盖方法是如何工作的,令人惊讶的是,它不起作用。另外,只需忽略类名称为HelloWorld的事实,它只是一个用于研究目的的文件。它已经更改为Filha.java btw
class HelloWorld {
public static void imprimir() {
System.out.println("Oie");
}//
public static void imprime(int a) {
System.out.println("27");
}//
}//
public class Filha extends HelloWorld {
public static void main(String[] args) {
imprimir();
imprime(55);
}//
@Override
public static void imprimir() {
System.out.println("Ola");
}//
@Override
public static void imprime(int num) {
System.out.println(num);
}//
}//
昨天,错误是公共静态void main(String [] args){中的线程“ main” java.lang.Error:未解决的编译问题中的异常。线,但我关闭了计算机,今天又打开了它的电源。
现在错误为类型为Filha的imprimir()方法必须重写或实现 public static void imprimir(){行的超类型方法。正如预期的那样,main方法在调用imprimir()时也存在错误。
我真的不知道要提供什么其他信息,因为它是一个简单的代码,带有一个简单的问题(我相信),这也是我的第一个问题,因此,如果我有任何遗漏,请询问,我将会继续
答案 0 :(得分:1)
您需要使用abstract class
而不是普通类,并且在HelloWorld
类中需要将常规方法替换为abstract
方法而无需实现,并且需要在Filha
类中替换将extends
与implements
一起使用,您将能够成功@Override
使用这些功能
注意:静态方法不能被覆盖
答案 1 :(得分:0)
带有您的代码
class HelloWorld {
public static void imprimir() {
System.out.println("Oie");
}//
public static void imprime(int a) {
System.out.println("27");
}//
}//
public class Filha extends HelloWorld {
public static void main(String[] args) {
imprimir();
imprime(55);
}//
@Override
public static void imprimir() {
System.out.println("Ola");
}//
@Override
public static void imprime(int num) {
System.out.println(num);
}//
}//
您没有覆盖任何内容。如果删除@Override,则代码将正常运行,但仅显示您在main方法中声明的内容,因为静态方法不能按如下方式覆盖:
class HelloWorld {
public static void imprimir() {
System.out.println("Oie");
}//
public static void imprime(int a) {
System.out.println("27");
}//
}//
public class Filha extends HelloWorld {
public static void main(String[] args) {
imprimir();
imprime(55);
}//
public static void imprimir() {
System.out.println("Ola");
}//
public static void imprime(int num) {
System.out.println(num);
}//
}//