当前位置: 首页 > 知识库问答 >
问题:

即使方法匹配,覆盖也不起作用

韶浩皛
2023-03-14

我正在再次学习一些面向对象的概念,所以我编写了这个简单的代码,只是为了看看重写方法是如何工作的,令人惊讶的是,它不工作了。另外,忽略类名为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);
    }//

}// 

昨天,错误是线程“main”java中的异常。错误:公共静态void main(String[]args){line中未解决的编译问题,但我关闭了我的计算机,今天打开了它,它不再存在了。

现在的错误是Filha类型的方法imprimir()必须重写或实现公共静态void imprimir(){line的超类型方法。正如预期的那样,在调用imprimir()的主方法中也存在错误。

我真的不知道要提供什么其他信息,因为这是一个简单的代码,有一个简单的问题(我相信),这也是我的第一个问题,所以如果我遗漏了什么,请提问,我会更详细。

共有2个答案

丁勇
2023-03-14

使用您的代码

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,代码将正常运行,但只显示您在主方法中声明的内容,因为静态方法不能被覆盖,如下所示:

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

}// 
谭曦
2023-03-14

您需要使用抽象类来代替普通类,在HelloWorld类中,您需要用没有实现的抽象方法替换常规方法,在Filha类中,用实现的扩展方法替换常规方法,您将能够成功地覆盖函数

注意:不能重写静态方法

 类似资料:
  • 问题内容: 今天,我遇到了一个有趣(非常令人沮丧)的方法问题,该问题导致我认为是一个经过良好测试的类崩溃了,并导致了一个错误,使我花了很长时间来追踪。 为了完整起见,我没有使用IDE或调试器-只是老式的文本编辑器和System.out。时间非常有限,这是一个学校项目。 无论如何- 我开发一个基本的购物车可能包含的Book对象。为了贯彻落实,以及对车的方法,我想检查,如果在已经存在。所以我走了 在测

  • 我正在使用用户密钥作为用户表中的主键 它总是显示这样的错误

  • 我想在android中显示弹出窗口时处理back press事件。我确实喜欢这个。在片段中: 在活动中,我确实喜欢这样 问题是,当我第一次按下back按钮时,popupwindow就消失了,override onBackPressed方法没有被调用。除非我按两次后退按钮。我像这样显示我的弹出窗口 谢谢你的帮助

  • 我正试图编写代码,从一个Android应用程序发送一条短信,但当我试图发送短信时,它给我返回了错误: 我检查了,但我拥有清单中的权限,如下所示: null null 我在网上搜索了一下,但是所有的错误都是关于语法的,你能帮我一下吗?

  • 问题内容: 我正在尝试防止旋转一个,但我无法做到这一点。 我正在做这样的事情: 和剧照旋转。UIViewController在以模态打开的UINavigationController内部。 从这里开始,我已经看了很多问题,但没有答案适合我。 在Swift 2中,我曾经重写,但在Swift 3中,该功能不再存在。 在Swift 3中,我该怎么做? 问题答案: 我不知道为什么要投票才能结束这个问题,如

  • 为什么会出现以下情况 导致以下错误 无法将类型“m”与“IO”匹配。“m”是一个刚性类型变量,由类型签名绑定:foo::forall(m::*- 据我所知,既然IO()应该等于MonadIO,MonadIO约束不应该允许这样做吗?