Java抽象类和接口

时间:2011-02-23 17:52:04

标签: java class interface abstract-class

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

如果我可以将Abstract类模拟为Interface,为什么java提供了Interface?

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

任何人都能简单解释一下。

5 个答案:

答案 0 :(得分:27)

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

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

相关问题:thisthis。后者没有直接关系,但它显示了为什么需要接口,即使抽象类就足够了。

答案 1 :(得分:2)

接口定义合同&可以定义常量,但不提供所有签约方法的实现。

抽象类可以提供方法的实现以及成员变量 - 如果需要,您可以创建一个抽象类,定义除了您在具体子类中所需的微调之外的所有内容。你不能用接口做这个,但是你可以实现多个接口&只扩展一个父类。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

答案

1)java中的多次继承是通过接口实现的。

2)如果某种情况需要某种方法的解释,而不是完整的方法,最好的方法是使用抽象类。

3)接口只为返回类型和参数类型提供 AGREEMENT