一、接口(interface)
1、定义
-
- 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要...则必须能...”的思想。继承是一个"是不是"的关系,而接口实现则是 "能不能"的关系
- 接口的本质是契约,标准,规范,就像我们的法律一样。制定好后大家都要遵守
- 一个类可以实现多个接口,可以得到多重继承的效果
2、接口的使用说明(JDK7及以前)
-
- ① Java中,接口(interface) 是与类(class)并列的结构
- ② 如何定义一个接口:使用interface关键字
- ③ 接口中只能定义全局常量和抽象方法
- 全局常量:public static final的,但是书写时,可以省略不写
-
-
- 抽象方法:public abstract修饰
-
-
- ④ 接口中不能定义构造器,意味着接口不可以实例化。
-
- ⑤ Java开发中,接口通过让类去实现(implements)的方式来使用
- 类实现接口以后,就获取了接口中声明的结构:常量、抽象方法
- 如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化
- ⑤ Java开发中,接口通过让类去实现(implements)的方式来使用
-
-
- 如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类
-
-
- ⑥ Java类可以实现多个接口
- 弥补了Java单继承性的局限性
- 格式:class AA extends BB implements CC,DD,EE
- ⑥ Java类可以实现多个接口
-
- ⑦ 接口与接口之间可以继承,而且可以多继承
-
- ⑧ 接口的具体使用,体现多态性
-
- ⑨ 接口的主要用途就是被实现类实现。(面向接口编程)
3、Java8中接口的新规定
-
- ① 接口中可以定义静态方法、默认方法
-
- ② 接口中定义的静态方法,只能通过接口进行调用,无法通过实现类及其对象调用
-
- ③ 接口中定义的默认方法,可以通过实现类的对象调用,无法通过实现类调用
-
- ④ 如果类实现的接口和继承的父类中,定义了同名同参数的方法,那么子类在没重写此方法的情况下,默认调用的是父类中声明的方法。“类优先”原则
- ⑤ 如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下,会出现接口冲突问题。要求实现类必须重写接口中的方法
- ⑥ 如何在子类(或实现类)的方法中调用父类、接口中被重写的方法
-
- ⑦ 类实现接口以后,(1)要么实现接口中的所有抽象方法,方可实例化;(2)要么当前类声明为抽象类(因为内部包含从接口中获取的抽象方法)
- ⑧ 类可以继承多个接口,接口也可以继承接口,一定程度上解决了类的单继承性;接口与接口之间可以多继承也可以单继承
4、创建接口匿名实现类的对象
-
- 1.创建了接口的非匿名实现类的非匿名对象
-
- 2. 创建了接口的非匿名实现类的匿名对象
-
- 3.创建了接口的匿名实现类的非匿名对象
-
- 4. 创建了接口的匿名实现类的匿名对象
5、接口的应用
-
- 代理模式(Proxy)
- 概述:代理模式是Java开发中使用较多的一种设计模式。代理设计就是为其他对象提供一种代理以控制对这个对象的访问
- 代理模式(Proxy)
-
-
- 应用场景
-
-
- 工厂模式
6、implements(实现)
-
- 语义:implements是接口(interface)中的一个关键词,用来让类实现接口
- 使用场景:
- ① 实体类与接口之间的实现
- ② 抽象类与接口之间的实现
二、抽象性
1、定义
-
- 抽象性也可以作为面向对象的一个特征
- 可以用来修饰的结构:类、方法
- abstract:抽象的
2、抽象性体现
1)修饰类:class abstract 类名{类中结构}
-
-
- ① 此类不能实例化
-
-
-
- ② 抽象类中一定有构造器,便于子类实例化时调用(涉及:子类对象实例化的全过程)
- ③ 开发中,都会提供抽象类的子类,让子类对象实例化,调用父类的结构,完成相关的操作
- ④ 抽象类中不一定有抽象方法;反之,包含抽象方法的类,一定是一个抽象类
-
2)修饰方法:权限修饰符 abstract 返回值类型 方法名(形参)
-
-
- ① 抽象方法只有方法的声明,没有方法体,所有此方法一定不能被调用
- ② 若子类重写了父类中的所有的抽象方法后,此子类方可实例化
-
-
-
- ③ 若子类没有重写父类(包括间接父类)中的所有的抽象方法,则此子类也是一个抽象类,需要使用abstract修饰
-
3)注意:
-
-
- ① 前提:抽象性使用的前提是类的继承性
- ② abstract不能用来修饰:属性、构造器等结构
- ③ abstract不能用来修饰私有方法、静态方法、final的方法、final的类
-
3、抽象类的匿名子类
-
- 非匿名的类非匿名的对象
-
- 非匿名的类匿名的对象
-
- 创建匿名子类的非匿名对象
-
- 创建匿名子类的匿名对象
4、模板方法设计模式(TemplateMethod)
-
- 抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式
- 解决的问题: