1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 多继承有什么坏处 为什么java搞单继承 接口为什么可以摈弃这些坏处

多继承有什么坏处 为什么java搞单继承 接口为什么可以摈弃这些坏处

时间:2023-05-19 14:37:56

相关推荐

多继承有什么坏处 为什么java搞单继承 接口为什么可以摈弃这些坏处

独角兽企业重金招聘Python工程师标准>>>

多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面:(1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量。例如:类ClassA:public class ClassA {protected int varSame = 0;}类ClassB:public class ClassB {protected int varSame = 1;}子类ClassC:(假设允许类与类之间多继承)public class ClassC extends ClassA, ClassB {public void printOut() {System.out.println(super.varSame);}public static void main(String[] args) {ClassC classC = new ClassC();classC.printOut();}}上面程序的运行结果会是什么呢?输出0还是1?(2)如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法。例如:类ClassA:public class ClassA {public void printOut() {System.out.println(0);}}类ClassB:public class ClassB {public void printOut() {System.out.println(1);}}子类ClassC:(假设允许类与类之间多继承)public class ClassC extends ClassA, ClassB {public static void main(String[] args) {ClassA classA = new ClassC();classA.printOut();// ------------------------- A行ClassB classB = new ClassC();classB.printOut();// ------------------------- B行ClassC classC = new ClassC();classC.printOut(); //------------------------- C行}}上面程序的运行结果会是什么呢?A、B、C三行的输出是0还是1?正因为有以上的致命缺点,所以java中禁止一个类继承多个父类;在接口中不能有实例变量,只能有静态的常量,不能有具体的方法(包含方法体),只能有抽象方法,因此也就摒弃了多继承的缺点。对于一个类实现多个接口的情况,因为接口只有抽象方法,具体方法只能由实现接口的类实现,在调用的时候始终只会调用实现类的方法(不存在歧义),因此不存在 多继承的第二个缺点;而又因为接口只有静态的常量,但是由于静态变量是在编译期决定调用关系的,即使存在一定的冲突也会在编译时提示出错;而引用静态变量一般直接使用类名或接口名,从而避免产生歧义,因此也不存在多继承的第一个缺点。对于一个接口继承多个父接口的情况也一样不存在这些缺点。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。