接口interface
接口的用途是用来定义现实世界不同类型事物的共同行为特征。
例如:
-飞行特征(包括起飞,飞行,着陆等幸福)是鸟和飞机所共有的
-鸟和飞机可定义为具体类
-它们的共同行为特征可被定义在接口中
接口种所有方法均为抽象方法
public interface Flyer{
public void takeiff();
.....
}
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要...则
必须能...”的思想。继承是一个"是不是"的关系,而接口实现则是 "能不能"
的关系。
具体类:某种事物抽象定义 抽象类:某类不同种事物抽象定义 接口:不同类不同种事物的共同行为抽象定义(方法) interface修饰符 接口中的方法都是公共抽象方法 和全局常量(public static final)全局常量在接口中大部分时没意义
有时必须从几个类中派生出一个子类,基础它们所有的属性和方法。但是,java不支持多重继承。有了接口,就可以得到多重继承的效果。
一个类可以实现多个接口
接口不能被实例化
集体类(子类)可以实现接口(父类),并实现接口中的全部抽象方法
class SubClass implements InterfaceA{}
具体类适用父接口的多态
接口也可以继承其他接口
implements
抽象类可以包含抽象方法,所以实现接口时可以对其抽象方法不予理会
子类同时继承父类并实现接口,通过接口间接的实现了多继承
子类和父类关系近一些,和接口关系远一些
接口只能继承接口,不能继承类,并且支出多继承
接口大部分为表达事物具备的某种能力,大部分接口的名称为形容词,形容事物具备的某种能力
如果某类具有了这样的能力,也可以认为这个类达到了接口的标准和规范
接口规范的目的是越多的子类实现越好
public class Mouse extends Device implements USB {}
接口用法总结
- 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系
- 通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩张功能
- 接口主要用来定义规范。解除耦合关系。
No. | 区别点 | 抽象类 | 接口 |
1 | 定义 | 对同意一类不同种事物的抽象定义包含抽象方法的类 | 不同类不同种事物的共同的行为的抽象,主要是抽象方法和全局常量的集合 |
2 | 组成 | 构造方法、抽象方法、普通方法、 常量、变量 | 常量、抽象方法、(jdk8.0:默认方法、静态方法) |
3 | 使用 | 子类继承抽象类(extends) | 子类实现接口(implements |
4 | 关系 | 抽象类可以实现多个接口 | 接口不能继承抽象类,但允许继承多个接口 |
5 | 常见设计模式 | 模板方法 | 简单工厂、工厂方法、代理模式 |
6 | 对象 | 都通过对象的多态性产生实例化对象 | |
7 | 局限 | 抽象类有单继承的局限 | 接口没有此局限 |
8 | 实际 | 作为一个模板 | 是作为一个标准或是表示一种能力 |
9 | 选择 | 如果抽象类和接口都可以使用的话,优先使用接口,因为避免单继承的局限 | |
10 | 特殊 | 一个抽象类中可以实现多个接口,一个接口中可以包含多个抽象方法 |
在开发种,一个类不要取继承一个已经实现好的类,要么继承抽象类,要么实现接口