JavaSe ——4、面向对象 (接口与抽象类)

来源:互联网 发布:最好看的韩国r级 知乎 编辑:程序博客网 时间:2024/05/18 14:14

抽象类:

  • 父类定义类的行为,无须知道如何实现,子类去实现。

  • 有abstract定义的方法,所在类必须是抽象类。

  • 抽象类无实例,不可new。

  • 抽象类成分有:属性、方法(可以不是抽象的)、构造器、初始化块、内部类、枚举类六种。

  • abstract修饰的类只能被继承,修饰的方法只能被重写,因此不可与final连用。

  • abstract修饰的方法不能用static修饰,也不能用private修饰。

  • 作用:模板模式,即提供多个子类方法的通用模板,并可提供一部分给子类实现。

接口:

  • 接口中的所有方法都是抽象方法(不修饰也自动加abstract,因此不能用static、private修饰),属性必须是常量(不指定也用static final(全局常量)自动修饰),可以有内部类、不能有构造器和初始化块。

  • 一个接口也可继承多个父接口,但只能继承接口,不能继承类。

  • 接口中的成员只能是public修饰,接口中的内部类、枚举、接口都用public static修饰。

  • 一个类可以实现(implements)多个接口,为java单继承的补充。

  • 类实现接口后可获得接口的常量属性,抽象方法、内部类等,实现接口后必须实现所有接口的抽象方法。

JAVA8对接口的改变:

  • 允许在接口中定义默认方法,必须用default修饰,默认且只能public,不能static。
  • 允许在接口中定义类方法,必须static修饰,默认且只能public修饰。

接口和抽象类:

  • 都不能实例化(new)。

  • 其中的抽象方法普通子类都必须实现。

  • 设计目的:

    • 接口:一种规范。对于实现者,规定必须提供哪些服务(通过方法),对于调用者则告诉其可以使用哪些服务即如何使用。多个模块的耦合标准、多个应用程序的通信标准。设计系统时通过接口设计,不应该常改变。

    • 抽象类:模板的设计方式,包含多个子类的共性,需要具体的实现。

行为规范:接口

通用功能:抽象

抽象类和接口类的实例化,通过多态性(向上转型,向下转型)。

  • 不同处tips:

接口只能包含抽象方法,抽象类可以有普通方法;

接口不能有静态方法,抽象类则可以有;

接口只能定义static final常量,抽象类可以有定义static和普通常量。

接口不能有构造器,抽象类可以,主要用于被子类调用。

一个类最多有一个直接父类,但可以继承多个接口。

应用:

  • 在web工程中,我的项目在dao层、service层,都提供了接口,并分别构建了dao和daoImpl,service和serviceImpl的包,这么写很明显多写了两层结构,于是上网查了其优点,做了总结:

    • 接口的必要性:

接口就是把具有相同功能,但是本身却没有任何关系的类的功能抽象出来,然后让我们自定义具体的实现。看到一本书这样写到:“接口就是一份契约,由类实现契约。契约中我编写了某些大的方针与前提,而签了约的类可以具体问题具体分析来实现自己的功能。

Java是强类型语言,在调用方法时,编译器会检查这个方法是否存在,当定义了接口时,就确保该方法一定会存在。

从前,我写代码不写接口,直接写实现。后来读了tomcat的源码,发现软件设计是从接口设计开始的,也就是说软件是从功能出发的,在功能定义(接口规范)的基础上再去做具体的实现。

那么在Java开发过程中,接口专注于需要实现什么功能,而不是实现细节。

无论是协同开发的大型项目,或者是自己能够独立完成的小型应用平台,都需要先分析项目的需求,确定好持久层、服务层等需要实现什么功能。

在接口中,我们可以定义我们需要在持久层进行怎样的增删改查,在服务层进行怎样的业务处理,但我们都不需要关注实现细节,从而能够快速的梳理好一个项目中我们的业务逻辑是怎么走通的,整个web项目是如何一步步从前端页面,最终到数据库拿到正确数据,然后经过正确的处理返回给前端页面进行下一步展示的。

程序是可拓展的。你在修改你具体的实现的类(或增加新的实现类)的时候呢,不需要去修改调用它的类;这个呢,是Java编程时候强调的”对拓展开放,对修改关闭“原则。在设计模式里面,很多都需要使用接口的。当然,这个也算是Java多态性的体现。第二呢,就是Java通过Interface实现多继承。继承的一个好处呢,就是代码的复用,减少代码错误。在这个当中,接口等同于一种规范,就是要实现这个接口,你就必须实现接口的方法,完成相应的功能。如果没有接口,那么在实现的时候,很可能遗漏方法、或者定义的方法不统一。

  • 接口相关的设计模式(工厂模式、代理模式),抽象类相关的设计模式(模板模式)。
原创粉丝点击