美文网首页
接口和抽象类

接口和抽象类

作者: Seven_DQ | 来源:发表于2018-08-08 18:06 被阅读0次

    之前在面试的时候,有遇到问接口和抽象类的区别。虽然自己用了很多的借口和抽象类,但是对于两种的理解还是不够高,所以自己再总结总结。

    1.抽象类

    抽象类定义:

     [public] abstract class ClassName {
         abstract void fun();
     }
    

    抽象类需要abstract关键字,类成员可以有成员变量,有具体方法,静态方法,静态常量,有抽象方法(需要关键字abstract)
    不能创建对象,而且抽象方法不能是private,因为私有的就不能继承了,抽象类就是用来继承,不让要他有何用,默认不写是public


    2.接口

    接口定义:

     [public] interface InterfaceName{
     }
    

    接口狭义来说就是一个对外提供的方法,广义来说就是系统之间对接的端口
    接口里可以有方法(抽象方法),变量(只能是public,而且会被隐式地指定为public static final变量),一般接口中不会定义变量的


    3.区别:

    a.一个类可以实现多接口,但只能继承一个抽象类
    b.类实现接口,必须实现接口里所有方法;类继承抽象类,也是必须实现抽象类中所有抽象方法,但是抽象类实现接口时,不需要实现所有方法
    c.抽象类可以提供正常方法,对于这一点,抽象类的扩展要比接口好。比如,在抽象类中定一个正常方法,他的子类不需要改动代码就有了这个方法,而在接口中定义一个方法,而实现它的类都得去实现这个方法,所以在一定程度上抽象类要比接口好
    d.在设计上,接口是对行为的抽象,比如飞,跑等等;而抽象类是对物的抽象,即类的抽象,比如动物,鸟类这些;结合a和c就可以把接口和抽象类的有点结合起来,这就是缺省适配模式:定义一个InterfaceA接口;定义一个AbstractA接口实现InterfaceA;而A类实现InterfaceA接口和继承AbstractA类,具体想了解可以google缺省适配模式;也可以java中的API,我影响比较深的集合的设计就用到这种设计模式


    4.参考:

    https://www.cnblogs.com/dolphin0520/p/3811437.html
    https://blog.csdn.net/xw13106209/article/details/6923556
    https://blog.csdn.net/xw13106209/article/details/6926253

    相关文章

      网友评论

          本文标题:接口和抽象类

          本文链接:https://www.haomeiwen.com/subject/boyovftx.html