5

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

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

4

5 回答 5

5

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

于 2012-05-18T06:08:07.623 回答
1

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

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

于 2012-05-18T06:09:31.187 回答
1

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

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

interface Interface{
     abstract String fun();
 }

Interface interfc=new Interface() {
    @Override
    public String fun() {
        return super.toString();
    }
};

Type type=interfc.getClass();

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

An anonymous class cannot have an explicitly declared constructor.

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

于 2012-05-18T07:14:47.567 回答
0

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

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

于 2012-05-18T14:28:30.690 回答
0

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

于 2014-08-09T06:22:49.973 回答