在java中实现接口的方法是重写还是不重写

在java中实现接口的方法是重写还是不重写,java,interface,polymorphism,multiple-inheritance,overriding,Java,Interface,Polymorphism,Multiple Inheritance,Overriding,我知道这可能很疯狂,但今天我的一个朋友问我,当我们在java中实现一个接口时,它被认为是方法重写吗。我告诉他这不是重写,因为当我们实现任何接口时,我们第一次提供了方法的工作(定义)。为了支持多重继承,java提供了一个接口,但他并不信服,并在争论。请把这个话题讲清楚 当存在该方法的现有实现时,术语“覆盖”适用。正确的术语是接口和其他抽象声明的“实现” @Override标记用于两种情况-在以下情况下使用: 该方法重写或实现在超类型中声明的方法-- 和来自: 在面向对象编程中,方法重写是一种语言特

我知道这可能很疯狂,但今天我的一个朋友问我,当我们在java中实现一个接口时,它被认为是方法重写吗。我告诉他这不是重写,因为当我们实现任何接口时,我们第一次提供了方法的工作(定义)。为了支持多重继承,java提供了一个接口,但他并不信服,并在争论。请把这个话题讲清楚

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

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

该方法重写或实现在超类型中声明的方法--

和来自:

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

请注意,接口可能具有-重新定义这些方法会覆盖它们:

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


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

乍一看,接口只是定义了API。因为没有可以重写的超级方法,所以实现是第一个方法

但自Java5以来,即使对于来自接口的方法,也习惯于添加
@Override
注释。这里的主要原因是捕捉当人们更改接口时发生的问题:现在你有了一个“悬而未决”的方法——没有API说该方法必须存在。如果从接口中删除方法,则注释会导致错误,捕获该方法以便正确清理所有代码

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

除了接口在很大程度上是一个抽象类,在字节码中有抽象方法。抽象方法也会重写


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

这不是重写。在接口中声明方法的签名,而不是实现。重写是指当您有多个方法时,接口是接口中声明的签名的实现。在Java5中,重写接口实现导致编译错误。由于java 6,它不再是一个错误。这似乎更适合该站点,因为它更具概念性而非实用性。接口中的默认方法为+1。我不认为我会想要使用它们,但我不知道它们。我同意它们令人不安,但如果没有它们,你就不能向面向公众的接口添加新声明。但是你不会“发现人们更改接口时发生的问题”吗无论如何,因为您的实现类将不再正确地实现接口?