【发布时间】:2011-03-14 11:23:51
【问题描述】:
我无法弄清楚为什么接口和抽象类的实例化在 java 中受到限制。我知道可以创建接口和抽象类的实现参考。我很清楚,但是为什么不能实例化呢?有人请帮帮我
【问题讨论】:
-
您的意思是哲学意义上的“为什么”,还是您在问编译器/运行时中的什么机制强制执行该规则?
-
@LukeH 我需要运行时机制
标签: java
我无法弄清楚为什么接口和抽象类的实例化在 java 中受到限制。我知道可以创建接口和抽象类的实现参考。我很清楚,但是为什么不能实例化呢?有人请帮帮我
【问题讨论】:
标签: java
接口和抽象类的重点是提供一个必须在具体类中实现的 API。
例如,假设我声明了这个接口:
public interface Foo
{
int bar();
}
想象一下如果这个是有效的代码:
Foo foo = new Foo();
int x = foo.bar();
x 的值是多少?我们没有在任何地方指定bar 的实现。这是一个毫无意义的调用,没有一个真正的实现来支持它。
【讨论】:
如果您将类视为创建(实例化)实例的蓝图,就像房屋的蓝图告诉您如何建造房屋一样。将界面视为房屋的平面图 - 它是房屋的不完整视图(规范)。没有足够的细节来建造房子——它只是房间的轮廓。抽象方法更糟糕 - 它只是一个房间的轮廓。
【讨论】:
接口和抽象类不是具体类。它们被认为是不完整的,而不是被创造出来的。您可以使用子类或实现类。
【讨论】:
抽象类是未完全实现的类。您想强制开发人员在实例化类之前实现类的所有抽象部分。
接口是类必须遵守的契约。因此,它不能被实例化。例如,在插件系统的情况下,定义一组类必须尊重的接口可能很重要:所有插件将共享相同的接口,因此可以互换。
【讨论】: