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实现多继承。继承的一个好处呢,就是代码的复用,减少代码错误。在这个当中,接口等同于一种规范,就是要实现这个接口,你就必须实现接口的方法,完成相应的功能。如果没有接口,那么在实现的时候,很可能遗漏方法、或者定义的方法不统一。
- 接口相关的设计模式(工厂模式、代理模式),抽象类相关的设计模式(模板模式)。
- JavaSe ——4、面向对象 (接口与抽象类)
- JavaSE----面向对象(多态、抽象类、接口)
- Javase—抽象类与接口习题
- JavaSE实战——面向对象(中) 抽象类,接口,多态,内部类,匿名内部类
- JavaSE实战——面向对象(中) 抽象类,接口,多态,内部类,匿名内部类
- Java面向对象——抽象类与接口
- Java面向对象——抽象类与接口
- java面向对象—抽象类、接口与多继承
- java面向对象—抽象类、接口与多继承
- java面向对象—抽象类、接口与多继承
- java面向对象—抽象类、接口与多继承
- javaSE-面向对象-接口和抽象类的区别
- javaSE-面向对象-抽象类
- JavaSE学习(6) 面向对象类和对象(5)抽象类、接口、final
- Android之JavaSe基础--面向对象高级部分-接口,抽象类(五)
- C++抽象编程——面向对象(3)——类与接口
- 面向对象--接口与抽象类
- 面向对象的抽象类与接口
- Fragment 生命周期
- 垃圾收集器
- Hibernate——HQL
- Monkey 测试命令
- time_wait状态
- JavaSe ——4、面向对象 (接口与抽象类)
- JMeter学习-001-JMeter初识
- SpringMVC学习笔记(九)
- 关于自己之后的学习
- Window下使用MongoDB
- Python 识别验证码
- Activity 生命周期
- C#时间格式转换为时间戳(互转)
- 类型转换工具类