关于abstract与interface的相同点
首先,把他们拿在一起比较,说明他们之间有联系,那就是他们都是对于对象的一个抽象定义(笔者的理解,也许还有其他),它是我们对于问题领域的分析和总结得出的抽象概念,它们是没有任何操作和实际动作的。正是由于这两种机制的存在才赋予了java强大的面向对象能力。
从使用角度来说:
不同点:
1.abstract 修辞的类,可以有默认操作和动作,interface没有。也就说abstract中可以有存在实现部分的方法,interface都是没有具体实现方法体的;
2.abstract 在子类中使用的时候,使用关键字extends继承,interface使用implements继承;
3.abstract 不能使用多继承,interface可以。那么这里可以理解出,当具体实现这两种类型的类的时候,abstrcat理解为“is a”的关系,也就是说实现他的子类就是这种类型,
而interface理解为“like a”的关系。那么具体这两种类别这么选择,可以从需求的主体出发,比如我们常见的带小电灯的移动电源,那么这里就有三个对象:带电灯的电源(PowerBankCanLight)、电源(PowerBank)、小电灯(Light),我们目标是创建一个带电灯的电源这个对象,那么这个对象主体他是一个电源,附带的有电灯的功能,那么就是最终要的对象就是 is a 电源 like a 小电灯,具体如下:
public abstract class PowerBank{};
public interface Light{};
public class PowerBankCanLight extends PowerBank implements Light{}。