用了接口还有必要用抽象类吗()


文章目录

    • 前言
    • 接口与抽象类
    • 用了接口还有必要用抽象类吗?
    • 小结

前言 关于接口与实现类的区别,相信大家都能说出一二三来,但小编在这还是总结一下。
接口与抽象类 1、二者表达概念不同,接口是为所有实现类定义的统一行为规范,实现类的行为需要按照接口中的规范去做。而抽象类是一类事务的高度聚合,对于继承抽象类的子类来说,与抽象类是 "is a"的关系。
2、抽象类在定义方法时,根据子类的一致行为,可以给出方法的实现,也可以不给出;而接口,其中定义的方法都不能给出实现部分。
3、继承/实现 对于两者所涉及的实现是不同的。继承抽象类的子类,可以不用进行重写,延用抽象类的方法,让其子类去实现。而对于接口来说,它的实现类必须给出相应的方法实现。
4、在抽象类中新增方法的话,其子类可以不用做任何改动,而在接口中新增方法,子类全部都要给出方法的实现。这也是为什么说接口是规范的意思。
5、接口可以多实现,而抽象类只能单继承。所以,使用接口可以实现间接的多重继承。
6、接口成员变量默认为:
public static final

并且必须赋初值,因为用 final 修饰,所以不能被修改。
而抽象类中成员变量默认为:
default

用了接口还有必要用抽象类吗? 在接口和实现类中有必要使用抽象类吗?增加了抽象类有什么好处呢?
让抽象类去实现接口,而不是每个实现类去实现接口,实现类一致的行为(或者说大部分一致的行为)在抽象类中进行实现,而不一致的行为(或者一小部分不一致的行为),在抽象类中写成抽象方法,让子类去重写,减少子类重写接口所有方法的负担。 使用抽象类前
用了接口还有必要用抽象类吗()
文章图片

使用抽象类后
用了接口还有必要用抽象类吗()
文章图片

小结 上文中例子,抽象类的作用是将子类一致的行为(flying)抽象出来,放到抽象类中,而不是各子类去实现,让子类复用抽象父类中的方法。
【用了接口还有必要用抽象类吗()】以上只是小编的一些想法,如有更好的观点,欢迎交流。

    推荐阅读