Java语言的优点非常多,小伙伴们知道java是否支持多继承吗?下面小编就将带你了解其中深浅。
Java支持多继承吗?
java类是不支持多继承的,java只有接口可以多继承,java里我们只能利用接口达到多实现,与多继承相仿。
Java为什么不支持多继承?
我们首先先从多重继承概念说起吧,c++首一开始引入的多重继承带来了诸如菱形继承一类的问题,再来为了解决这个问题又不得不引入了虚继承这种概念。然而在实际的应用中人们发现继承更多的只被用在两种场合:扩充/改善基类,以及实现多态。对于前者,单继承足以;而对于后者,则真正需要的其实是纯抽象类,即只包含纯虚函数的基类。而对于这一种基类,由于其目的和普通的实例类已经有所不同,因此在java中将其改称为interface,即接口加以明确区分。
因而,java或c#所谓的不支持多重继承,只是不支持对实例类的多重继承——因为这种继承所带来的一点点代码上的缩减远比不上其引入的麻烦,但是对于用于实现多态的多重继承,即implement interface依然是很好的支持了的。
我们要知道,Java 8前,Java是不允许“实现多继承”,简称不允许“多继承”。但Java支持“声明多继承”——Java的接口的多继承——一个类可以实现多个接口(“继承”了多个接口上的方法声明),而一个接口可以继承多个接口(同样是“继承”了多个接口上的方法声明)。
接口只允许有方法声明而不允许有实现,因而不会出现像C++那样的实现多继承的决议问题;抽象类可以有方法实现,但要遵循Java类的单继承限制,也避免了实现多继承的问题。这是早期Java为了与C++区分开的一个决定。
但从Java 8开始,接口允许为方法提供“默认实现”了——默认方法(default method)。因而实质上Java 8的接口多继承其实也会涉及到实现多继承,并且语言层面有专门规定去解决实现多继承时选择哪个版本的问题——哪个都不选择,而是在发现会继承多个默认方法实现并且没有override时报错,逼使用户显式override可能冲突的方法。
这使得Java 8开始接口可以当作traits来使用,达到实现多继承的目的。
以上就是本篇文章所有内容,如若需要知道更多其他编程常见问题及答案,可以来本站了解详情。
推荐阅读: