• 接口
  • 接口的多态性
  • 接口总结
  • 接口练习
  • 接口USB
  • 实现接口的匿名类对象(重点)
  • 实现比较对象接口
  • 面向接口的编程思想
  • 工厂设计模式
  • 基本结构
  • 接口IWorkFactory
  • 接口Work
  • 测试类
  • 总结
  • 代理模式
  • 被代理类
  • 代理类
  • 测试类
  • 总结


接口

java 挡板的作用 java接口挡板_interface


重点:

  • 接口可理解为彻底的抽象类(只含有常量和抽象方法)
    即属性都是常量,方法都是抽象方法
  • 接口定义功能,被类实现(不是继承,因为单继承,多实现)
  • 类与接口的关系:实现
  • 接口修饰符:public或default
  • 实现接口后就有接口的功能
  • 接口没有构造器,不可以实例化
  • 类的继承使得创建某类对象一定会上溯,从而调用Object构造器(回顾)

  1. 属性修饰符省略了public static final
  2. 方法修饰符省略了public abstract

java 挡板的作用 java接口挡板_java 挡板的作用_02


1. Serializable接口定义序列化相关的功能,实现该接口,代表String类型对象可序列化

2. 实现Comparable接口的可以比较两元素大小


java 挡板的作用 java接口挡板_接口_03


错误原因:方法权限修饰符为default,要求为public,重写不能降低可见性(见重写章节)


java 挡板的作用 java接口挡板_子类_04

  • 接口可多实现,关注接口多实现的写法
  • 实现所有接口的方法,方可实例化,不然为抽象类

java 挡板的作用 java接口挡板_接口_05

  • 接口间的继承关系
  • GG类既要实现MM接口(接口的父接口)的方法,也要实现JJ接口的方法

小tips:

java 挡板的作用 java接口挡板_代理类_06


可以迅速写接口的方法


接口的多态性

背景:Duck类实现了这三个接口

java 挡板的作用 java接口挡板_接口_07

测试类

java 挡板的作用 java接口挡板_interface_08

  • 接口没有构造器,但可以有接口的声明
  • 子类的对象实体赋给父类引用,父类不仅可以是继承的父类,还可以是子类实现的接口,同样有从小往大的转化过程
  • 关注接口的声明(作为形参)
  • 关注虚拟方法调用

接口总结

  • 接口不需要考虑层次关系
  • 接口定义规范,如Collection(集合接口)
  • 接口解除耦合关系(原先通过子父类获取方法,现在直接实现接口)

接口练习

接口USB

  • 定义标准尺寸(不可更改,接口里的常量)
  • 定义功能(比如连接,退出)
  • 驱动理解为接口的实现类的集合

java 挡板的作用 java接口挡板_代理类_09


接口实现类

打印机类和U盘类

java 挡板的作用 java接口挡板_interface_10


电脑类

java 挡板的作用 java接口挡板_java 挡板的作用_11

  • 传入接口形参
  • 编译时是抽象方法,实际执行具体实现类的方法

实现接口的匿名类对象(重点)

java 挡板的作用 java接口挡板_接口_12


java 挡板的作用 java接口挡板_java 挡板的作用_13

实现USB的接口未知,称为匿名类
- USB替代匿名类的构造器位置,大括号内书写匿名类实现接口的具体方法
- 下方写法更简略

实现比较对象接口

题目:

java 挡板的作用 java接口挡板_java 挡板的作用_14


测试类:

java 挡板的作用 java接口挡板_接口_15


父类

java 挡板的作用 java接口挡板_接口_16


子类

java 挡板的作用 java接口挡板_接口_17

  • 写法类比equals方法
  • 当传入非同类对象时,抛出异常

面向接口的编程思想

java 挡板的作用 java接口挡板_java 挡板的作用_18

  • Java应用程序要连接数据库,进行增删改查
  • JDBC:一类标准,大部分是接口(要实现的功能定义为接口),Sun公司提供
  • 不同数据库厂商提供不同驱动(XXXX Driver),驱动即实现接口的具体类的集合
  • 解决了适配性的问题,Java应用程序只需要面向JDBC编程即可

工厂设计模式

基本结构

java 挡板的作用 java接口挡板_代理类_19

  • 上图IWorkFactory接口的功能是返回work对象,但不造是哪个具体work对象,仅保留功能(不创建Work对象)
    从而定义getWork方法,由work的“子类”(work接口的具体实现类)决定创建的具体work对象
  • 一句话就是:IWorkFactory接口创建对象的过程延迟到子类(特殊的子类)来完成

接口IWorkFactory

java 挡板的作用 java接口挡板_接口_20


接口Work

java 挡板的作用 java接口挡板_interface_21

  • 上图IWorkFactory接口实现类是返回下图Work接口的实现类的
    (如学生工厂类返回学生类)
  • IWorkFactory接口没有决定返回哪个对象,由具体实现类来决定返回的对象,只不过那个对象是由Work接口来继承(特殊的继承)到的(有点乱)

测试类

java 挡板的作用 java接口挡板_接口_22

  • 编译期看就是接口间在操作
  • 具体运行时是实现类在进行

总结

  • 本质是创建对象的时机问题
  • 工厂模式中,接口先定义功能,真正需要使用时
    由子类决定创建时机以及创建谁的对象

代理模式

java 挡板的作用 java接口挡板_interface_23


接口名字特别,表示代理的是对象

左边为代理类,右边为被代理类

调用代理类方法,希望真正执行被代理类的方法


被代理类

java 挡板的作用 java接口挡板_子类_24


代理类

java 挡板的作用 java接口挡板_接口_25

  • 定义接口类型的变量(Object object)
  • 在代理类构造器中将属性(被代理类)实例化

测试类

java 挡板的作用 java接口挡板_子类_26


调用方法之前,创建代理类对象时,属性(即被代理类)初始化


总结

  • 上方为静态代理模式(代理类和接口一一对应,不同接口要创建不同的代理类)
  • 后续学习基于反射的动态代理模式:一个代理类实现所有被代理类功能,需要
    动态创建代理类对象