最近公司加班厉害,很久没有更新博客了,今天下班早,就写点,
其实到现在为止自己也只是会用接口,和抽象类,对于这二者的区别也仅仅停留在定义的概念上,但是最近看到的一篇文章,对我影响很大,
抽象类用abstract 声明,接口用interface声明,如这之类的定义,直接略过,直奔主题,来点通俗易懂的干货。
抽象类是对事物的抽象,即对类的抽象,把一类具有公共特点的类(包括属性和行为),抽象成一个父类,实现类去继承
而接口是对类(局部)行为的抽象,
举个简单的例子,飞机和鸟都有都一个共同的行为,飞,那么就可以将飞机设计为一个Airplane,将鸟设计为一个Bird类,但不能将飞行设计为一个类,因为它并不是对一类事物的抽象,只是一个行为特性,此时可以将其设计成一个接口:Fly,包含一个fly()方法,那么Airplane和Bird都去继承Fly即可,然后各自实现fly()方法,然后不管是运输机,客机,还是战斗机直接继承Airplane类即可,鸟类同理。
此时可以看出,继承extends 是一个 “是不是” 的关系,如 运输机 是一个飞机,而implements 是一个 “有没有”的关系,(有就实现接口,没有就不实现)即 飞机有 飞行的 行为 在此可以看出,抽象类是一中模板式的设计行为,而接口是一种辐射式的设计行为。