java为什么不能多继承_java为什么不支持多继承

概述

多重继承是面向对象概念的一个特性,其中一个类可以继承多个父类的属性。当超类和子类中都存在具有相同签名的方法时,就会出现问题。在调用该方法时,编译器无法确定要调用哪个类方法,甚至在调用哪个类方法时也无法确定优先级。

java不支持类的多继承,但是可以通过接口或内部类来曲线实现多继承。

为什么不支持多继承

请看下面的代码,它将编译报错:

public class MultiInheritTest {

@Test

public void SonTest() {

Son son = new Son();

/**

* 编译报错:

* 模棱两可的方法调用。

* son对象不知道是调用Parent1的fun()还是Parent2的fun()。

*/

son.fun();

}

}

class Parent1 {

public void fun() {

System.out.println("parent1");

}

}

class Parent2 {

public void fun() {

System.out.println("parent2");

}

}

// 编译报错: 类不支持多继承

class Son extends Parent1, Parent2 {

}

输出:

compile error

以上例子可以看出,当多个父类有同样的方法签名时,子类将不知道调用哪一个父类的方法。

钻石问题

GrandParent

/ \

/ \

Parent1 Parent2

\ /

\ /

Son

// 祖父类

class GrandParent

{

void fun()

{

System.out.println("Grandparent");

}

}

// 父类1

class Parent1 extends GrandParent

{

void fun()

{

System.out.println("Parent1");

}

}

// 父类2

class Parent2 extends GrandParent

{

void fun()

{

System.out.println("Parent2");

}

}

// Error : 不支持多继承

class Test extends Parent1, Parent2

{

public static void main(String args[])

{

Test t = new Test();

t.fun();

}

}

为了避免这种复杂性,java不支持多继承

简化复杂性

多继承带来很多复杂性,容易在各种操作过程中产生问题,比如强制类型转换、构造函数链接等,而最重要的原因是,实际上需要多继承的场景非常少,所以为了保持事情的简单和直观,干脆不支持多继承。

参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值