文章目录
前言
关于接口与实现类的区别,相信大家都能说出一二三来,但小编在这还是总结一下。
接口与抽象类
1、二者表达概念不同,接口是为所有实现类定义的统一行为规范,实现类的行为需要按照接口中的规范去做。而抽象类是一类事务的高度聚合,对于继承抽象类的子类来说,与抽象类是 "is a"的关系。
2、抽象类在定义方法时,根据子类的一致行为,可以给出方法的实现,也可以不给出;而接口,其中定义的方法都不能给出实现部分。
3、继承/实现 对于两者所涉及的实现是不同的。继承抽象类的子类,可以不用进行重写,延用抽象类的方法,让其子类去实现。而对于接口来说,它的实现类必须给出相应的方法实现。
4、在抽象类中新增方法的话,其子类可以不用做任何改动,而在接口中新增方法,子类全部都要给出方法的实现。这也是为什么说接口是规范的意思。
5、接口可以多实现,而抽象类只能单继承。所以,使用接口可以实现间接的多重继承。
6、接口成员变量默认为:
public static final
并且必须赋初值,因为用 final 修饰,所以不能被修改。
而抽象类中成员变量默认为:
default
用了接口还有必要用抽象类吗?
在接口和实现类中有必要使用抽象类吗?增加了抽象类有什么好处呢?
让抽象类去实现接口,而不是每个实现类去实现接口,实现类一致的行为(或者说大部分一致的行为)在抽象类中进行实现,而不一致的行为(或者一小部分不一致的行为),在抽象类中写成抽象方法,让子类去重写,减少子类重写接口所有方法的负担。使用抽象类前
使用抽象类后
小结
上文中例子,抽象类的作用是将子类一致的行为(flying)抽象出来,放到抽象类中,而不是各子类去实现,让子类复用抽象父类中的方法。
以上只是小编的一些想法,如有更好的观点,欢迎交流。