java中接口和抽象类有什么区别,举例!

2)接口和抽象类有什么区别?
答:马克-to-win:抽象类里可以有实现的方法,接口里不能有,所以相对来讲各方面实现都简单(尤其动态方法调度)。另外:类可以实现多个接口。反过来说,也正是抽象类一个致命伤:类只能继承一个超类(抽象类或其他类)。

3)为什么接口能胜任作为和外部系统打交道的合同而抽象类就不行?(见下面我的山和车,肥皂的例子)【新手可忽略不影响继续学习】
答:假设你用抽象类作为合同,外部系统有个类A,它本来固有就必须得继承一个类B,现在还必须得继承你这个抽象类,语法上不允许。反过来,如果你不用抽象类而用接口作为合同,语法上就允许了。这样,接口的多实现性,就等同于另外一句话:“不占继承资源”。外部系统具有很强的不可预见性,换句话说, 谁知道你过去的类继承没继承其他的类,我不管,反正我的合同内容写在一个接口中,即使你过去必须继承一个别的类,也不影响你再多实现一个我,因为我是接口。
4)为什么接口中的属性和方法都默认为public?Sun公司当初为什么要把java的接口设计发明成这样? 【新手可忽略不影响继续学习】
答:如上所述,既然接口强于抽象类能胜任作为和外部系统打交道的合同。换句话说,一般来讲和外部系统打交道,自然考虑用“接口”。“外部”二字自然让我们做出如下结论:属性和方法都应默认为public。因为是和外部系统打交道,存在很大的未知性,我并不知道未来外部别人怎么用我们的接口,所以尽量少给别人设置障碍(少添点堵),就设置权限为public,出于这种考虑,Sun公司一开始就规定,接口属性和方法默认就为public。

更多内容请见原文,文章转载自:https://blog.csdn.net/qq_44639795/article/details/103110634

posted @ 2021-01-30 20:19  师徒行者  阅读(96)  评论(0编辑  收藏  举报