【问题标题】:If interfaces do not have constructors, then is Object class super class of an interface?如果接口没有构造函数,那么 Object 类是接口的超类吗?
【发布时间】:2012-05-25 17:27:32
【问题描述】:

我读到接口没有构造函数,这意味着它不会调用其超类的 super()。我还读到Java中的每个类都是Object的子类

接口呢,它是Object的子类吗?为什么?

【问题讨论】:

    标签: java class interface super


    【解决方案1】:

    没有接口不能有构造函数。因为接口支持多重继承。这意味着如果一个类继承了两个接口,那么由于构造函数链接,从类构造函数中调用哪个构造函数将会有歧义。

    【讨论】:

      【解决方案2】:

      没有接口是 Object 类的子类,因为接口不能扩展类,无论是隐式还是显式。

      构造函数的原因是创建一个实例,因为接口不能被实例化,因为它们不提供任何功能,它们只是一个契约,只有类可以被实例化,因此它们有构造函数。

      【讨论】:

        【解决方案3】:

        虽然有些人建议将接口视为“可以做”而不是“is-a”关系,但我认为将它们视为“是 __er”或“是 __able 事物”更有帮助。用现实世界的比喻来说,一本书(死树版)、一本装订的纸质杂志、一份报纸、一张促销广告传单、一个标志和一张上面写着一些字的纸片,都是“可读的东西” ”。如果有人给另一个人看一本书并问“这是一个可读的东西”,答案是它是。另一方面,如果有人向另一个人展示一本书并问“这是什么?”回复不会是“可读的东西”,而更可能是“一本书”,或者可能是“查尔斯狄更斯小说《远大前程》美国第二版的精装第五印本”。任何类型的“可读事物”都具有某种身份,而不仅仅是“可读事物”。

        Java 接口也是如此。一个对象可以实现任意数量的接口,但是每个对象除了它支持的接口集之外还必须有一个类型。请注意,可以定义一个方法,该方法将返回实现接口的未知类型的新对象;这相当于问某人“请给我读点东西”,而不指定所需的对象类型。这种方法可以选择要返回的对象类型,并给调用者一个“可读”的对象。然而,与一般方法不同,构造函数要求调用者准确指定所需的对象类型。仅仅指定一个对象是“可读的”是不够的。

        【讨论】:

          【解决方案4】:

          接口是方法定义的命名集合(没有实现)。接口也可以包含常量声明。

          接口和类有一些基本的区别,其中之一是没有构造函数。实际上接口不是为此而设计的,您无法实例化接口,但您仍然可以实例化接口。

          interface Interface{
               abstract String fun();
           }
          
          Interface interfc=new Interface() {
              @Override
              public String fun() {
                  return super.toString();
              }
          };
          
          Type type=interfc.getClass();
          

          这里的接口已经被实例化为匿名类。但是你仍然不能根据java语言规范在这里放置构造函数。但是你仍然可以使用super class,它会立即成为这个匿名类的超类。

          An anonymous class cannot have an explicitly declared constructor.
          

          还有一个替代解决方案是在超类中使用 final 变量。

          【讨论】:

            【解决方案5】:

            不,不是。一个接口不能被实例化形成一个对象,它不是一个类。

            【讨论】:

            • 你确定接口不能被实例化?那么匿名类呢?
            • @Quoi:正如你自己所说,匿名类——某个接口的匿名实现。
            猜你喜欢
            • 1970-01-01
            • 2012-02-17
            • 2017-05-25
            • 2010-11-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-25
            相关资源
            最近更新 更多