Java为什么不支持多继承?

/ 2评 / 0

Java为什么不支持多继承?这个问题其实真的挺简单。

我们可以先举一个多重继承错误的例子,我们定义一个动物(类)既是狗(父类1)也是猫(父类2),两个父类都有“叫”这个方法。那么当我们调用“叫”这个方法时,它就不知道是狗叫还是猫叫了,这就是多重继承的冲突。

package com.glj.demo1;

public class Cat {
	public void say(){
		System.out.println("this is Cat say!");
	}
}
------------------------------
package com.glj.demo1;

public class Dog {
	public void say(){
		System.out.println("this is dog say!");
	}
}
----------------------------------------------------
package com.glj.demo1;

public class CatAndDog extends Dog,Cat{
	public static void main(String[] args) {
		this.say();//这里是猫叫呢还是狗叫呢?
	}
}

所以,如果你需要弄一个既要有猫叫又要有狗叫的什么鬼动物来的话,那么只需要创造一个描述这类行为的接口,然后在自己的类里面实现这个行为的接口,最终就能实现所谓的行为来了....

因此,Java支持接口的多继承,不支持类的多继承,Java不支持类的多继承的一个原因是避免实现方法的版本冲突

所以需要实现多继承,那么就是下面的

多接口+组合=多继承

下面我们实现一个多继承的例子,即一个接口people类,里面有一个say方法和一个work的行为方法,再有一个Chinese接口类和American接口类去继承了people的接口,然后二者结婚生下了一个中美的混血儿..ChandAm类...

package com.glj.demo;

public interface People {
	public abstract void say();
    public abstract void work();
}
---------------------------------------
package com.glj.demo;

public interface American extends People{

	@Override
	public void say();

	@Override
	public void work();

}
---------------------------------------
package com.glj.demo;

public interface Chinese extends People{
	@Override
	public void say();

	@Override
	public void work();
}
---------------------------------------
package com.glj.demo;

public class ChandAm implements Chinese,American{

	@Override
	public void say() {
		// TODO Auto-generated method stub
		System.out.println("我是中美的混血儿");
	}

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println("我会打太极");
	}

}
-----------------------------------------------
package com.glj.demo;

public class Test {
	
	public static void main(String[] args) {
		ChandAm cna = new ChandAm();
		cna.say();//我是中美的混血儿
		cna.work();//我会打太极
	}
}
所以,从上面的例子不难发现,Java其实是支持多继承的,具体为:
  • Java中的接口支持多继承(接口与接口之间为继承关系),因为接口不提供具体实现方式,只是一种规范,所以支持。
  • Java的类是支持多接口的实现。
  • Java的类是不支持多继承的,原因是Java是强类型语言,多继承会导致调用的不确定性,所以Java的类不支持。

2条回应:“Java为什么不支持多继承?”

  1. 风与路人说道:

    这个网站的代码高亮显示和图片的储存是如何做的啊,谢谢,请指教下

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注