在采访中我被问到以下问题。我试着回答这个问题,但我想要问题的确切答案。
如果我可以将Abstract类模拟为Interface,为什么java提供了Interface?
这意味着如果在Abstract类中我可以将所有方法标记为抽象,然后抽象类将作为接口工作,那么为什么我需要接口。
任何人都能简单解释一下。
答案 0 :(得分:27)
这是一个非常标准的面试问题。答案是:因为您可以实现多个接口,但不能扩展多个抽象类。
来自JRE的示例:LinkedList
同时是List
和Deque
。这些接口定义了类的行为。它们不提供任何实现细节。虽然抽象类可以提供一些。
答案 1 :(得分:2)
接口定义合同&可以定义常量,但不提供所有签约方法的实现。
抽象类可以提供方法的实现以及成员变量 - 如果需要,您可以创建一个抽象类,定义除了您在具体子类中所需的微调之外的所有内容。你不能用接口做这个,但是你可以实现多个接口&只扩展一个父类。
接口和接口抽象类可用于多态地使用具体类。
答案 2 :(得分:1)
抽象类可以很好地设置默认方法并设置层次结构。问题是子类只能一次性扩展超类。另一方面,接口可以相互扩展多次,子类可以实现任意数量的接口。这提供了很大的灵活性并提供了变革的潜力。理想情况下,可以组合,即抽象类实现interface1 ... interface2,两者都是最好的。
答案 3 :(得分:0)
面试官提出这个问题的原因是因为你的答案反映了你对编程语言(和编译器)的深刻理解。特别是,Java在(纯)抽象类之上定义了接口的概念,以便(部分地)支持多重继承(在接口之间)。如果没有引入这种机制,我们要么无法实现某种多重继承,要么在C ++中完全成熟的多重继承所造成的大混乱。
答案 4 :(得分:0)
1)java中的多次继承是通过接口实现的。
2)如果某种情况需要某种方法的解释,而不是完整的方法,最好的方法是使用抽象类。
3)接口只为返回类型和参数类型提供 AGREEMENT 。