作者:漫湾镇团委 | 来源:互联网 | 2023-05-20 12:06
我知道这可能很疯狂,但今天我的一位朋友在询问我们在java中实现接口时感到困惑的是它被视为方法覆盖.我告诉他这不是重写,因为我们在实现任何接口时第一次提供方法的工作(定义).为了支持多重继承,java提供了接口,但他并不相信并且在争论.请介绍一下这个话题.
1> mk...:
当存在该方法的现有实现时,术语"覆盖"适用.正确的术语是"实现"接口和其他抽象声明.
该@Override
标签用于两种情况-它时使用:
该方法会覆盖或实现在超类型中声明的方法.- javadocs
来自维基百科:
在面向对象编程中,方法重写是一种语言特性,它允许子类或子类提供已由其一个超类或父类提供的方法的特定实现.
请注意,接口可以使用默认方法 - 重新定义这些方法会覆盖它们:
当您扩展包含默认方法的接口时,您可以...重新定义默认方法,该方法将覆盖它.
除了链接到"规范"来源之外,我不确定在与朋友赢得语义争论方面提供什么建议.也许你可以问他"实现"和"覆盖"之间的区别是什么,以及他将使用什么词而不是"重写"重新定义现有方法的概念.
2> Aaron Digull..:
乍一看,接口只是定义API.由于没有要覆盖的超级方法,因此实现是第一种方法.
但是从Java 5开始,@Override
即使对于来自接口的方法,也习惯于添加注释.这里的主要原因是捕捉人们改变界面时发生的问题:现在你有一个"悬空"的方法 - 没有API说方法必须在那里.如果从界面中删除方法,则注释会导致错误,因此您可以正确清理所有代码.
但这并不意味着实施方法会覆盖任何内容.
除了接口是一个非常抽象的类,在字节代码中使用抽象方法.并且抽象方法会覆盖.
我的感觉是你可以争论两种方式,但这个论点没有实际意义,除非你有一个用例,问题的答案实际上对代码有实际影响.在这里,由于编译器隐藏了所有丑陋的细节,因此并不重要.