我们学过Java的都应该比较清楚,Java是一门面向对象的语言,具备完全的OOP能力, 它保留了C++中的一些主要概念,包括权限修饰符,继承,虚函数等,同时去除了一些C++中容易混淆的概念。
其中去掉多重继承是Java中最重要的修改之一。
下图给出两种语言在OOP能力方面的异同点:
多重继承:是指某个类的父类的个数多余1个,如果个数最多只有一个,则是单继承。
如果一个类(子类)继承于某个类(父类),表明子类可以有选择的使用父类中的某些属性与方法,当然同时可以在子类中添加自己的属性和方法。
在C++中的多继承的使用弊端:
假定某个子类继承于多个父类,巧合的是这几个父类中含有同名的方法,假如是A,方法的重载循序这些方法具有自己独特的代码,而子类继承父类中的A方法,那么子类将继承哪个方法A呢?具体执行时,又使用哪段代码?这就是多继承带来的混乱,这种机制是不可避免的问题。
在Java中抛弃了多重继承,只允许单继承机制,子类要继承的方法只会从一个父类中得到,不会有二义性,不会造成混乱。Java中虽然去除了多继承的写法,但并没有减弱这方面的能力。C++中能直接从多个父类中继承多特性的高效机制,在Java中通过接口来实现,接口可以看做一个特殊的类,与类一样,它也有继承的特性,而且可以使用多重继承。
接口与类的差别在于,接口内定义的方法可以没有方法体。当从多个父类中继承同名的方法时,因为他们的方法体是空,所以不会产生歧义,所以,Java规定继承了空方法的类中必须重写父类中的空方法,这样才能创建实例。