美文网首页
Java抽象类和接口类

Java抽象类和接口类

作者: michael_fang | 来源:发表于2020-10-04 18:09 被阅读0次

    Java中接口和抽象类的区别是什么?什么时候用接口?什么时候用抽象类?抽象类和接口存在的意义是什么?能解决哪些编程问题?

    1)类关键字修饰符:

    抽象类使用abstract修饰,含有抽象方法(使用abstract关键字修饰的方法)的类是抽象类,必须使用abstract关键字修饰;
    接口使用interface修饰

    2)实例化:

    抽象类和接口均不能实例化
    若想实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象

    3)实现:

    一个类只能实现一个抽象类;
    一个类可以实现多个接口,接口自己本身可以通过extends 关键字扩展多个接口,如果一个类实现多个接口,多个接口有相同default方法,则子类必须重写该方法

    4)访问级别关键字修饰符:

    JDK 1.8以前,接口中的方法必须是public的
    JDK 1.8时,接口中的方法可以是public的,也可以是default的
    JDK 1.9时,接口中的方法可以是private的
    JDK 1.8以前,抽象类的方法默认访问权限为protected
    JDK 1.8时,抽象类的方法默认访问权限变为default

    5)方法:

    抽象类可以含有抽象方法,也可以不包含抽象方法,抽象类中可以有具体的方法,抽象类中的抽象方法只有方法体没有具体实现;
    接口中的方法均为抽象方法,接口中不能包含实例或静态方法

    6)变量

    接口中除了 static、final 变量,不能有其他变量,而抽象类中则不一定

    7)设计层面:

    抽象是对类的抽象,是一种模板设计;接口是对行为的抽象,是一种行为的规范

    8)继承层次

    抽象类是一种自下而上的设计思路,先有子类的代码重复,然后再抽象成上层的父类(也就是抽象类)。
    而接口正好相反,它是一种自上而下的设计思路。我们在编程的时候,一般都是先设计接口,再去考虑具体的实现。

    9)使用场景:

    使用抽象类是为了代码的复用,
    接口是对行为的抽象,而使用接口的动机是为了实现多态性,侧重于抽象和解耦;
    接口实现了约定和实现相分离,可以降低代码间的耦合性,提高代码的可扩展性。

    10)具体代表:

    抽象类-模板模式(把不变的流程抽象到父类的模板方法中,将可变的部分留给子类实现)
    eg.
    JDK的InputStream、OutputStream、Reader、Writer;
    AbstractList中的AddAll是模板方法,add、get、set均抛出异常异常没法正常使用需要子类重写
    HttpServlet中的service方法是模板方法,doGet和doPost可以是子类重写定制的部分。

    接口:
    eg.
    Spring的BeanFactory,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。BeanFactory只是个接口,并不是IOC容器的具体实现,但是Spring容器给出了很多种实现,如DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等,其中XmlBeanFactory就是常用的一个,该实现将以XML方式描述组成应用的对象及对象间的依赖关系

    相关文章

      网友评论

          本文标题:Java抽象类和接口类

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