【问题标题】:Interface does not have constructor, then how can it be inherited?接口没有构造函数,那怎么继承呢?
【发布时间】:2013-02-05 14:21:52
【问题描述】:

据我所知,子类构造函数使用super(); 调用超类构造函数。 但是既然接口没有构造函数,那怎么继承呢?

【问题讨论】:

  • 你是对的。您不能从接口继承类,而类当然可以实现接口。接口只能继承接口,但是接口没有构造函数,所以这里没有问题。

标签: java inheritance constructor interface


【解决方案1】:

但是由于接口没有任何构造函数,如何进行继承??

很简单,一个接口不能有任何实例字段,所以没有什么可以构造的。您不能将代码放入接口中(无论如何都到 Java 7),因此不需要调用任何内容。

【讨论】:

  • +1 表示最高 Java 7 的注释。 AFAIK Java 8 将允许“默认实现”,不是吗?。
  • @Gamb 确实。这不包括构造函数,所以它仍然不是问题,但您可以在 Java 8 的接口中定义方法。
【解决方案2】:

接口是一个契约,定义了实现必须提供哪些方法。类不继承接口而是实现它。

来自the specification

这种类型没有实现,但其他无关的类可以 通过为其抽象方法提供实现来实现它。

【讨论】:

    【解决方案3】:

    接口(也称为服务合同)是实现的,而不是构造的。它们定义了一个类提供的一组方法(服务),因此客户端知道他对实现类的期望,而不管实现接口的实际类型如何。构造函数与给定类型的这个特定实例相关,实现接口。

    IYourObject yourObject = new YourObject();
    

    另一方面,接口继承也是通过扩展来实现的。它将一个接口的方法“添加”到另一个接口,并允许在“层次结构”中的不同接口之间切换对象的接口类型。

    【讨论】:

      【解决方案4】:

      接口不是继承的——而是实现的

      【讨论】:

        【解决方案5】:

        接口不包含构造函数,原因如下:

        • 接口的数据成员已经初始化。
        • 不允许定义的特殊定义方法的构造函数以及接口数据成员是静态的。

        【讨论】:

          猜你喜欢
          • 2017-03-11
          • 2017-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-25
          • 2013-02-10
          • 1970-01-01
          • 2012-04-16
          相关资源
          最近更新 更多