面试题答案
一键面试优势
- 避免菱形继承问题:在C++的多重继承中,如果一个类从多个父类继承,而这些父类又有共同的基类,会导致菱形继承问题,造成数据冗余和歧义。Java接口多重继承不存在此问题,因为接口只是定义方法签名,没有实现代码,不存在数据继承带来的冗余和冲突。
- 灵活性更高:一个类可以自由选择实现多个接口,而不必受限于类继承体系。这使得Java类可以更灵活地添加功能,不同接口的功能可以自由组合,而在C++中多重继承可能因为类继承体系的限制而不便于扩展。
- 降低耦合度:接口只定义了行为规范,实现类与接口之间的耦合度相对较低。相比之下,C++多重继承中类与类之间耦合度较高,因为继承涉及到实现细节,一个父类的改变可能影响到多个子类。
局限性
- 功能实现限制:接口只能定义方法签名,不能包含成员变量(除了静态常量)和方法的实现代码(Java 8之前)。相比之下,C++多重继承可以从多个父类继承成员变量和具体的方法实现,在功能实现的丰富性上Java接口多重继承稍显不足。
- 不能继承状态:由于接口不能有实例变量,所以通过接口多重继承无法像C++多重继承那样继承对象的状态。如果一个类需要从多个来源获取状态信息,在Java中只能通过其他方式(如组合)来模拟,不如C++多重继承直接。