Java中接口和抽象类

java只支持单继承,但可以继承多个接口,interface和abstract class 是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意。其实,两者之间还是有很大的区别的。

接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。

接口的抽象级别更高

抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。狗和猫是都可以抽象为动物。

人可以吃东西,猫也可以吃东西,你可以把“吃东西”定义成一个接口,然后让人或猫这些类去实现它.


什么时候用interface,什么时候用abstract class?

当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

相同点:

相同一

都不能被实例化

相同二

接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能被实例化

不同点:

一、从语法定义层面看abstract class和interface

区别一

abstract class可以有自己的数据成员,也可以有非abstract的方法,可以用public ,protected,private,final,static修饰

interface只能有静态的不能被修改的数据成员,也就是必须是public static  final的数据成员,不过一般interface中没有数据成员,只有方法,所有的方法都是public abstract的,不存在静态的方法

区别二

abstract class 可以有默认的方法,比如要给男人和女人同时增加一个走路的方法,不需要在每个类中添加,只需要在抽象类人中添加一个具体方法,那么所有的子类就有了走路的方法。

interface在JDK8之前是不能提供具体的方法,只能提供抽象的方法,JDK8开始,可以有默认方法

二、从设计层面看abstract class和interface

区别三

abstract class 是is的关系

比如说飞机是运输工具,燕子是鸟

interface 是can的能力

飞机和燕子都能飞



全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务