接口
接口的语法
- 接口可以看做是一种特殊的"抽象类",抽象类中能够有部分实现,而接口不能有任何实现.
- 接口的语法:
interface A{
float PI=3.14f;
public void add()
}
3.接口和类的命名规则一样,首字母大写
4.接口和类的访问修饰符只有两种: a.默认不加,只能在同包中被访问 b.public,全局通用
5.接口的组成: a.静态常量 static final (默认可以省略不写,必须初始化其值). b.抽象方法 abstract (默认可以省略不写)
6.接口中的成员都是public的,默认不写也是public 不能缩小范围.
7.接口是抽象的,不能实例化,以下两种写法是一样的. a.interface A{} b.abstract infterface A{}
8.在JDK5之前 没有枚举enum,通常在接口中定义常量组来实现枚举效果
9.接口可以继承接口,但不能继承类,并且弥补类的单一继承,接口可以多继承.
10.接口不能有构造方法.
实现接口
- 接口是抽象的,不能实例化
- 所以依赖于实现类去实现接口 a.一个类可以实现多个接口,逗号分隔. b.实现接口的关键是:implements. c.一个类实现了接口,需要实现(重写)接口中的所有方法,包括接口所有父级接口. d.如果是抽象类实现接口,可以无需实现接口中的方法.
- 接口变量可以引用实现类对象,符合里氏替换原则,所以也可以实现多态效果
- 继承表示的是 is a 的关系,接口通常表示的是一种能力,可以理解为 can do.常以able结尾.
- 继承会影响对象的本质.而接口的侵入比较小,只要求对象具备某些功能.
- 案例: a.cellphone是手机的基类. b.有Nokia和Huawei作为子类 c.手机可以拍照,但不是照相机,所以实现photograph接口. d.照相机camera也是实现了拍照接口. e.如果旅行的过程中需要拍照,可以拿出相机,也可以拿手机拍照.
策略设计模式
- 创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式.
- 这里方法包含执行算法的固定不变的部分,而”策略“包含变化的部分
- 案例: a.对数组进行排序 b.算法有三种 二分法 division,插入排序insert,冒泡bubble c.可以根据需要使用不同的排序方式进行排序
- 尽管在构建具有某些未实现方法的的类,你的第一想法可能是创建接口,但抽象类仍然是用于此目的的一种重要而必须的工具,因为你不可能总是使用纯接口.
- 继承抽象类会控制你的本质,而实现接口本质不变,只是要求你具备什么样的能力.
- 接口和抽象类都是具有强制约束力,如果不写重写方法都无法编译通过.
- 接口可以多继承,可以通过灵活的组合衍生出新的接口. a.有单独的接口phothoable,Network,playMusic,calable,sendmsg,Touchable b.可以在以上接口的基础上,衍生出camera,HandSet,Pad等子接口.
- 不要盲目崇拜接口,具体情况还是要具体分析,权衡利弊后选择抽象类还是接口.
深入理解接口
- 接口是一种约定,一个标准,一个规范。
- 接口的目的:将设计(接口)与现实分离,因此接口被用来建立类与类之间的协议。
- 接口好比指指点点的领导,把那些事情要做,大致怎么做罗列一道,而员工就是实现类。
- 一个类可以实现多个接口,并且可以向上转型为每个接口,因为每一个接口都是一个独立的类型。
- 如果一个类实现了接口,也继承了父类,则父类要写在前面。
- 接口是双方的约定,所以接口中所有内容都是共有的,保证双方都清楚知道所有内容。
- 同时实现多个接口时候的命名冲突需要注意方法名和参数相同,但返回值类型不同时会报错。
抽象类和接口的区别
- 以打印机的例子来说明接口和类
- 接口和抽象类都是抽象的,都不能实例化,都可以用来做设计,都可以包含抽象方法。
- 接口提供了形式,而未提供任何具体实现,抽象类可以有具体实现。
- 抽象类是普通类与接口之间的一种中庸之道,是一个过渡地带。
- 接口的倾入性小,因为接口可以多实现,而继承是单根性,在都可以使用的前提下,通常优先考虑接口。