【问题标题】:why interface and abstract methods can't be instantiated?为什么不能实例化接口和抽象方法?
【发布时间】:2011-03-14 11:23:51
【问题描述】:

我无法弄清楚为什么接口和抽象类的实例化在 java 中受到限制。我知道可以创建接口和抽象类的实现参考。我很清楚,但是为什么不能实例化呢?有人请帮帮我

【问题讨论】:

  • 您的意思是哲学意义上的“为什么”,还是您在问编译器/运行时中的什么机制强制执行该规则?
  • @LukeH 我需要运行时机制

标签: java


【解决方案1】:

接口和抽象类的重点是提供一个必须在具体类中实现的 API。

例如,假设我声明了这个接口:

public interface Foo
{
    int bar();
}

想象一下如果这个有效的代码:

Foo foo = new Foo();
int x = foo.bar();

x 的值是多少?我们没有在任何地方指定bar 的实现。这是一个毫无意义的调用,没有一个真正的实现来支持它。

【讨论】:

  • 我对您的示例代码进行了小幅编辑。我希望这是您最初的意图。
【解决方案2】:

如果您将类视为创建(实例化)实例的蓝图,就像房屋的蓝图告诉您如何建造房屋一样。将界面视为房屋的平面图 - 它是房屋的不完整视图(规范)。没有足够的细节来建造房子——它只是房间的轮廓。抽象方法更糟糕 - 它只是一个房间的轮廓。

【讨论】:

    【解决方案3】:

    接口和抽象类不是具体类。它们被认为是不完整的,而不是被创造出来的。您可以使用子类或实现类。

    【讨论】:

      【解决方案4】:

      抽象类是未完全实现的类。您想强制开发人员在实例化类之前实现类的所有抽象部分。

      接口是类必须遵守的契约。因此,它不能被实例化。例如,在插件系统的情况下,定义一组类必须尊重的接口可能很重要:所有插件将共享相同的接口,因此可以互换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-06
        • 2022-07-22
        • 1970-01-01
        • 1970-01-01
        • 2013-06-09
        相关资源
        最近更新 更多