【发布时间】:2012-05-25 17:27:32
【问题描述】:
我读到接口没有构造函数,这意味着它不会调用其超类的 super()。我还读到Java中的每个类都是Object的子类
接口呢,它是Object的子类吗?为什么?
【问题讨论】:
标签: java class interface super
我读到接口没有构造函数,这意味着它不会调用其超类的 super()。我还读到Java中的每个类都是Object的子类
接口呢,它是Object的子类吗?为什么?
【问题讨论】:
标签: java class interface super
没有接口不能有构造函数。因为接口支持多重继承。这意味着如果一个类继承了两个接口,那么由于构造函数链接,从类构造函数中调用哪个构造函数将会有歧义。
【讨论】:
没有接口是 Object 类的子类,因为接口不能扩展类,无论是隐式还是显式。
构造函数的原因是创建一个实例,因为接口不能被实例化,因为它们不提供任何功能,它们只是一个契约,只有类可以被实例化,因此它们有构造函数。
【讨论】:
虽然有些人建议将接口视为“可以做”而不是“is-a”关系,但我认为将它们视为“是 __er”或“是 __able 事物”更有帮助。用现实世界的比喻来说,一本书(死树版)、一本装订的纸质杂志、一份报纸、一张促销广告传单、一个标志和一张上面写着一些字的纸片,都是“可读的东西” ”。如果有人给另一个人看一本书并问“这是一个可读的东西”,答案是它是。另一方面,如果有人向另一个人展示一本书并问“这是什么?”回复不会是“可读的东西”,而更可能是“一本书”,或者可能是“查尔斯狄更斯小说《远大前程》美国第二版的精装第五印本”。任何类型的“可读事物”都具有某种身份,而不仅仅是“可读事物”。
Java 接口也是如此。一个对象可以实现任意数量的接口,但是每个对象除了它支持的接口集之外还必须有一个类型。请注意,可以定义一个方法,该方法将返回实现接口的未知类型的新对象;这相当于问某人“请给我读点东西”,而不指定所需的对象类型。这种方法可以选择要返回的对象类型,并给调用者一个“可读”的对象。然而,与一般方法不同,构造函数要求调用者准确指定所需的对象类型。仅仅指定一个对象是“可读的”是不够的。
【讨论】:
接口是方法定义的命名集合(没有实现)。接口也可以包含常量声明。
接口和类有一些基本的区别,其中之一是没有构造函数。实际上接口不是为此而设计的,您无法实例化接口,但您仍然可以实例化接口。
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 变量。
【讨论】:
不,不是。一个接口不能被实例化形成一个对象,它不是一个类。
【讨论】: