【发布时间】:2011-07-02 23:06:55
【问题描述】:
在采访中,我被问到以下问题。我试图回答这个问题,但我想要这个问题的确切答案。
如果我可以将抽象类模拟为接口,为什么java提供接口?
这意味着如果在抽象类中我可以将所有方法标记为抽象,然后抽象类将作为接口工作,那么为什么我需要接口。
谁能简要解释一下。
【问题讨论】:
标签: java class interface abstract-class
在采访中,我被问到以下问题。我试图回答这个问题,但我想要这个问题的确切答案。
如果我可以将抽象类模拟为接口,为什么java提供接口?
这意味着如果在抽象类中我可以将所有方法标记为抽象,然后抽象类将作为接口工作,那么为什么我需要接口。
谁能简要解释一下。
【问题讨论】:
标签: java class interface abstract-class
接口定义契约并可以定义常量,但不提供所有契约方法的实现。
抽象类可以提供方法和成员变量的实现——如果您愿意,您可以创建一个抽象类来定义除具体子类中所需的微调之外的所有内容。你不能用接口做到这一点,但你可以实现多个接口并只扩展一个父类。
接口和抽象类都可以用于多态地使用具体类。
【讨论】:
面试官之所以问这个问题是因为你的回答反映了你对什么是编程语言(和编译器)的深刻理解。特别是,Java 在(纯)抽象类之上定义了接口的概念,以便(部分)支持(接口之间的)多重继承。如果没有引入这种机制,我们要么无法实现某种多重继承,要么在 C++ 中完全成熟的多重继承造成的大混乱。
【讨论】:
1) MULTIPLE INHERITANCE在java中是通过接口实现的。
2) 如果需要对方法进行一些解释,但不是完整的方法,最好的方法是使用抽象类。
3)接口仅仅为返回类型和参数类型提供一个AGREEMENT。
【讨论】:
抽象类可以很好地设置默认方法并设置层次结构。问题是子类只能一次性扩展超类。另一方面,接口可以相互扩展多次,子类可以实现任意数量的接口。这提供了很大的灵活性并提供了变革的潜力。理想情况下,可以组合,即抽象类实现接口1…接口2,两全其美。
【讨论】: