【问题标题】:Java abstract class and interface [duplicate]Java抽象类和接口[重复]
【发布时间】:2011-07-02 23:06:55
【问题描述】:

在采访中,我被问到以下问题。我试图回答这个问题,但我想要这个问题的确切答案。

如果我可以将抽象类模拟为接口,为什么java提供接口?

这意味着如果在抽象类中我可以将所有方法标记为抽象,然后抽象类将作为接口工作,那么为什么我需要接口。

谁能简要解释一下。

【问题讨论】:

    标签: java class interface abstract-class


    【解决方案1】:

    这是一个非常标准的面试问题。答案是:因为可以实现多个接口,但不能扩展多个抽象类。

    来自 JRE 的示例:LinkedList 既是 List 又是 Deque。这些接口定义了类的行为。它们不提供任何实现细节。虽然抽象类可以提供一些。

    相关问题:thisthis。后者没有直接关系,但它说明了为什么需要接口,即使在抽象类就足够的情况下也是如此。

    【讨论】:

      【解决方案2】:

      接口定义契约并可以定义常量,但不提供所有契约方法的实现。

      抽象类可以提供方法和成员变量的实现——如果您愿意,您可以创建一个抽象类来定义除具体子类中所需的微调之外的所有内容。你不能用接口做到这一点,但你可以实现多个接口并只扩展一个父类。

      接口和抽象类都可以用于多态地使用具体类。

      【讨论】:

        【解决方案3】:

        面试官之所以问这个问题是因为你的回答反映了你对什么是编程语言(和编译器)的深刻理解。特别是,Java 在(纯)抽象类之上定义了接口的概念,以便(部分)支持(接口之间的)多重继承。如果没有引入这种机制,我们要么无法实现某种多重继承,要么在 C++ 中完全成熟的多重继承造成的大混乱。

        【讨论】:

          【解决方案4】:

          回答

          1) MULTIPLE INHERITANCE在java中是通过接口实现的。

          2) 如果需要对方法进行一些解释,但不是完整的方法,最好的方法是使用抽象类。

          3)接口仅仅为返回类型和参数类型提供一个AGREEMENT

          【讨论】:

            【解决方案5】:

            抽象类可以很好地设置默认方法并设置层次结构。问题是子类只能一次性扩展超类。另一方面,接口可以相互扩展多次,子类可以实现任意数量的接口。这提供了很大的灵活性并提供了变革的潜力。理想情况下,可以组合,即抽象类实现接口1…接口2,两全其美。

            【讨论】:

              猜你喜欢
              • 2011-12-05
              • 2011-07-13
              • 1970-01-01
              • 2011-07-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-02-21
              • 2012-07-14
              相关资源
              最近更新 更多