在java中实现接口方法是否覆盖

我知道这可能很疯狂,但今天我的一位朋友在询问我们在java中实现接口时感到困惑的是它被视为方法覆盖。 我告诉他,当我们实现任何接口时,第一次提供方法的工作(定义)时,它不会重写。 为了支持多重inheritance,java提供了接口,但他并不相信并且在争论。 请介绍一下这个话题。

当存在该方法的现有实现时,术语“覆盖”适用。 正确的术语是“实现”接口和其他抽象声明。

@Override标记用于两种情况 – 在以下情况下使用:

该方法会覆盖或实现在超类型中声明的方法。 – javadocs

来自维基百科 :

在面向对象编程中,方法重写是一种语言特性,它允许子类或子类提供由其一个超类或父类提供的方法的特定实现。

请注意,接口可以具有默认方法 – 重新定义这些方法会覆盖它们:

当您扩展包含默认方法的接口时,您可以…重新定义默认方法,该方法将覆盖它。

除了链接到“规范”来源之外,我不确定在与朋友赢得语义争论时提供什么建议。 也许你可以问他“实现”和“覆盖”之间的区别是什么,以及他将使用什么词而不是“重写”重新定义现有方法的概念。

乍一看,接口只是定义了API。 由于没有要覆盖的超级方法,因此实现是第一种方法。

但是从Java 5开始,即使对于来自接口的方法,也习惯于添加@Override注释。 这里的主要原因是捕获人们更改界面时发生的问题:现在你有一个“悬空”的方法 – 没有API说方法必须在那里。 如果从界面中删除方法,注释会导致错误,因此您可以正确清理所有代码。

但这并不意味着实现方法会覆盖任何内容。

除了接口是一个非常抽象的类,在字节代码中使用抽象方法。 并且抽象方法会覆盖。

我的感觉是你可以争论两种方式但是这个论点没有实际意义,除非你有一个用例,问题的答案实际上对代码有实际影响。 在这里,由于编译器隐藏了所有丑陋的细节,因此并不重要。