即使方法匹配也无法覆盖

时间:2020-06-16 16:27:49

标签: java oop overriding

我再次研究了一些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()时也存在错误。

我真的不知道要提供什么其他信息,因为它是一个简单的代码,带有一个简单的问题(我相信),这也是我的第一个问题,因此,如果我有任何遗漏,请询问,我将会继续

2 个答案:

答案 0 :(得分:1)

您需要使用abstract class而不是普通类,并且在HelloWorld类中需要将常规方法替换为abstract方法而无需实现,并且需要在Filha类中替换将extendsimplements一起使用,您将能够成功@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);
    }//

}//