【问题标题】:Override not working even though the methods are matching即使方法匹配,覆盖也不起作用
【发布时间】:2020-06-16 16:27:49
【问题描述】:

我正在再次研究一些 OOP 概念,所以我编写了这个简单的代码,只是为了看看重写方法是如何工作的,令人惊讶的是,它不起作用。另外,请忽略类名是HelloWorld的事实,它只是一个用于学习目的的文件。它已经改为 Filha.java 顺便说一句

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);
    }//

}// 

昨天,错误是 public static void main(String[] args) { 中的 Exception in thread "main" java.lang.Error: Unresolved compiler problem线,但我关闭了我的电脑,今天打开它,它不再存在了。

现在错误是 Filha 类型的方法 imprimir() 必须覆盖或实现 public static void imprimir() { 行的超类型方法。正如预期的那样,调用 imprimir() 的 main 方法中也存在错误。

我真的不知道要提供什么其他信息,因为它是一个简单的代码,有一个简单的问题(我相信),这也是我的第一个问题,所以如果我遗漏任何内容,请询问,我会更完整.

【问题讨论】:

标签: java oop overriding


【解决方案1】:

您需要使用abstract class 而不是普通类,并且在HelloWorld 类中,您需要将常规方法替换为abstract 没有实现的方法,并且在Filha 类中将extends 替换为implements 和你将成功@Override函数

注意:静态方法不能被覆盖

【讨论】:

    【解决方案2】:

    用你的代码

    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);
        }//
    
    }// 
    

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多