java为什么单继承,单机和多继承各自特点

java为什么单继承,单机和多继承各自特点

java中只有单继承,不支持多继承。

如果两个类,A和B,它们可以拥有一样的属性和方法比如login(),但方法执行结果可能不一样.
这个时候你用C继承A和B,那么你调用login(),两个类都有login()你调用哪个类的呢.
~
java只有接口可以多实现,相当于多继承了.

多继承可以看作是单继承的扩展。所谓多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量和方法,这时我们可以用覆盖该方法来解决,不然会错
多继承二义性主要出现在: 
(1)不同继承路径有同名成员, 
(2)不同继承路径继承共同的基类,存在多个基类子对象。 
消除二义性, 
对于(1)可以采用作用域限定; 
对于(2)可以采用作用域限定或虚基类。

现代的编程语言往往选择有条件的多继承,这个有条件的意思是,对于接口,允许一个类实现多个接口,但是对于类,则只能单继承。这么做的原因是避免菱形继承给程序员带来的困惑
所谓菱形继承,就是有abcd四个类,b c继承了a,而d继承了b c,而如果b c又分别有同名的变量或者方法,这让d和调用d的程序员感觉无所适从。
接口因为不涉及到实现,所以如果a b c都是接口,那么d同时实现b c没事,b c的相同抽象方法定义在d看来是一回事。

很多初学者从c语言学起,对于c语言的语言特性本能地认为理所当然。但是实际上c/c++都是非常落后的语言,这种落后性表现在,过于强调语言的灵活性和效率,牺牲了必要的代码约束,现代编程语言和它们最大的不同是,我们优先考虑编程语言的可读性、可靠性、可维护性,可以认为,c/c++是面向机器的语言,而java是面向人的语言。
不要以为c++存在即为合理。比如说c++对数组就没有越界检查,但是java就有。我想没有什么java程序员会认为int a[2]; a[100]=123;这样的代码写出来不能编译是什么让他们不方便的事情。