【问题标题】:Keyword "@Override" and static methods in JavaJava中的关键字“@Override”和静态方法
【发布时间】:2022-10-23 20:46:48
【问题描述】:

我正在学习 Java 中的 interface 概念,特别是关于它与 class 的继承。据我了解,这是接口继承的基本代码语法

interface one{
    void funcOne();
}

class Test implements one{
    @Override public void funcOne(){
         System.out.println("this is one");  
    }
}

但是当我删除短语@Override 时,代码仍然可以正常工作。那么使用该关键字的目的是什么?

  • 在使用static 方法进行测试时,我的困惑加起来了。例如下面的代码会抛出一个错误
interface one{
    static void funcOne(){
        System.out.println("hello");
    }
}

class Test implements one{
    @Override static void funcOne() {
        System.out.println("This is one");
    }
}

但是当@Override 被删除时它不会抛出错误。

我什么时候应该使用关键字@Override,它与static 函数有什么关系?

【问题讨论】:

  • 在第一个测试中更改funcOne,你会看到。 @Override 如果函数抛出错误才不是覆盖另一个函数。
  • 请注意,@Override 不是关键词.它是一个注解.如果将它放在一个方法上,那么编译器将检查以确保该方法实际上覆盖了某些东西,如果没有,则抛出错误。静态方法永远不能覆盖任何东西。在静态情况下,您的 Test.funcOne 静态方法隐藏one.funcOne 静态方法但没有覆盖它。
  • 啊,所以注释@Override 是为了确保这个方法被覆盖。谢谢你们的帮助!

标签: java inheritance interface static


【解决方案1】:
  1. 使用注解 @Override 让你的编译器帮助你检查它是否真的覆盖了一个方法。

    万一像

    public String tostring() {
        return ...;
    }
    

    您可能将“tostring()”与“toString()”误认为是正确地覆盖了它。代码会像平常一样编译和运行,但是调用 toString() 方法时的结果不是你想要的。

    但是如果你使用注解 @Override

    @Override
    public String tostring() {
        return ...;
    }
    

    当您尝试编译它时,编译器会向您显示一个错误,以说明您没有覆盖任何方法。然后你会发现你没有拼写正确。

    2. 静态方法不能被覆盖,只能隐藏。

    (如果对您有帮助,请采纳,谢谢。)

【讨论】:

  • 谢谢你的帮助伙伴。你的回答太清楚了。
【解决方案2】:

覆盖对于静态方法来说并不是真正的事情。你永远不需要在静态方法上使用它,你也不应该在静态方法上使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 2014-04-16
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    相关资源
    最近更新 更多