首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否需要实现接口方法

是否需要实现接口方法
EN

Stack Overflow用户
提问于 2013-05-24 19:59:19
回答 6查看 1.5K关注 0票数 2

我有一个类似下面的界面。

我在Eclipse中得到了这个默认代码。困惑,为什么会出现"@Override“属性?

在我们声明了所有这些方法并随后在Object类中实现的情况下,是否有其他可用的顶级默认接口?

代码语言:javascript
运行
复制
  public interface IRecord {
        @Override
        public String toString();

        public void showName(String name);
    }

它的一个实现如下所示

代码语言:javascript
运行
复制
public class Record implements IRecord{

    @Override
    public void showName(String name) {
          //Doing something
    }
}

它像预期的那样得到了很好的编译,但我有点奇怪为什么它不要求我实现toString()方法的实现?

它在Object类中,但是Object类没有实现我的接口。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-24 20:01:39

所有类都隐式扩展了已经实现了toString()Object。由于您的Record类实现了您的接口,并从Object继承了toString()方法,因此就履行了约定。

票数 6
EN

Stack Overflow用户

发布于 2013-05-24 20:30:45

在我们声明了所有这些方法并随后在Object类中实现的地方,有没有其他可用的顶级默认接口?

Java Language Specification

如果接口没有直接的超接口,则接口隐式声明一个具有签名s、返回类型r的公共抽象成员方法m,并抛出与每个公共实例方法m相对应的抛出子句t,该方法具有在对象中声明的签名s、返回类型r和抛出子句t,除非接口显式声明了具有相同签名、相同返回类型和兼容的throws子句的方法。

换句话说,即使是一个空接口也会隐式地继承Object的所有公共方法。这就是Eclipse (正确地)添加@Override注释的原因。它很可能永远不会因为从Object中删除任何方法而失败,但它有助于避免输入错误:

代码语言:javascript
运行
复制
interface IRecord {
   @Override
   public String toSTring();
}

Error: "The method toSTring() of type IRecord must override or implement a supertype method"

请参阅问题第二部分的其他答案。

票数 2
EN

Stack Overflow用户

发布于 2013-05-24 20:04:23

接口不会从Object继承,但任何将实现您的接口的类都会继承,因此默认情况下会实现它。

您可能想知道为什么Eclipse在您的界面模板中提供了默认的重写toString:我认为这是为了提醒您以后要实现一些有意义的toString

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16734447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档