11.3 接口
11.3.1 接口的概念
抽象类可以理解为是从多个类中抽象出来的模板,不但允许有抽象方法,还可以有变量和普通方法等。如果抽象的更彻底,只留下常量和抽象方法,则此时的抽象类有了新的名字:接口。
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含公有的静态常量和公有的抽象方法的定义,而没有成员变量和方法的实现。(在jdk1.7及之前)
【java8新特性中 允许接口中有方法体:】
接口是抽象方法和静态常量的集合!
11.3.2 接口的使用(接口就是定义一种标准)
11.3.2.1 接口的声明语法
接口声明语法:
//完整的接口的定义 :public abstract interface(){} //省略了abstract
[public] interface 接口名 [extends 父接口1, 父接口2] { //接口之间可以继承,还可以多继承
//零到多个常量定义…
int MAX = 1; //定义变量,系统会自动添加public static final,把变量变成常量
public static final int MAX1 = 1; //与上面定义的效果一样
//零到多个抽象方法定义…
void speak(); //声明抽象方法,可以省略 public 和abstract的修饰符
public abstract void speak1(); //与上面效果一样
String test( int a); //可以有返回值,也可以传递参数
}
说明:
权限修饰符,和class的权限修饰符相同,只有public和default两种。如果是default,则对同一包内其他类或接口可见。
interface 标示接口的关键字。
extends 后面跟接口列表,表示该接口继承的父接口。接口只能继承接口,不能继承类。多个父接口之间用英文的”,”(逗号)隔开。
声明常量时可以像声明变量一样声明,但是系统会自动把该变量转成常量
声明抽象方法。修饰符可以完全省略,系统会默认接口中的所有方法均是public abstract的,如果一定要添加修饰符,只能添加public和abstract
定义两个接口:门(功能:开\关)、锁(功能:上锁/解锁)。
11.3.2.2 接口的实现类
由于接口只有抽象方法,所以接口与抽象类一样不能直接创建对象。我们一般说抽象类的子类,说接口的实现类。
一个类实现接口使用关键字implements。语法格式:
[public][abstract] class 类名 implements 接口1, 接口2 …{
}
定义一个实现类:防盗门类,并实现门接口,锁接口。并实现功能。
11.3.2.3 接口的使用规则
实现接口必须使用关键字implements。
一个人可以具有多项能力,一个类可以实现多个接口,多个接口之间使用英文逗号隔开。
类实现接口支持多实现。实现类必须实现所有接口的所有抽象方法,如果不能完全实现,则该类必须标记为抽象类。
一个类实现多个接口的同时,还可以来继承一个类。继承类的时候写法是:
必须先写继承,再写实现。
11.3.2.4 接口的使用用途
通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系。
通过接口指明多个类需要实现的方法
通过接口了解对象的交互界面,而无需了解对象所对应的类
使用接口,具体代码可以不依赖具体实现类,当具体实现类有变化时,代码不需调整。使用接口使软件更容易扩展。
面向对象的最高境界,是面向接口编程!!!
笔记:
接口的引用可以指向实现类的对象(向上转型),当指向实现类的接口的引用需要访问实现类特有属性和方法时,将接口的引用赋值给实现类的引用(向下转型)
实现空接口不是没有意义,它的意义其实很大,可以使实现类多一个引用
比较接口与抽象类
作业:
定义一个接口,USBInterface。USB接口。再编写一个抽象方法 void service(); 该USB用有的功能。
编写三个实现类:UDisk(U盘类) 、UFan(USB风扇)、UMouse(USB鼠标),分别实现USBInterface。并各自实现自己的功能。
然后对各个实现类的对象,进行方法测试。
定义一个乐器(Instrument)接口,其中有抽象方法 void play();定义一个类实现上述接口。写一个测试类,在测试类中定义一个方法void playInstrument(Instrument ins),并用测试类中的main方法调用这个方法来测试乐器是否可以正常工作。
给女神写一封情书。
情书内容包括:
1、称谓
2、问候
3、内容
4、祝福
5、落款
要求: 1、定义情书接口 LoveLetter 比如:String writeTitle(); //书写称谓。 返回值为具体称谓 String writeHello(); //书写问候 String writeBody(); //书写内容 .... 2、 编写情书实现类 LoverLetterImpl 3、 编写测试类运行
- 抽象类、接口、继承、final综合运用:设计一个系统,xxx门的实现过程。
思路:
1、所有的Door都应该有open和close的功能,所以可以定义一个接口IToggle,拥有开门和关门的抽象方法。
2、设计一个抽象类表示防盗的门,增加防盗的抽象方法theftproof(); 设计一个抽象类表示防水的门,增加防水的抽象方法waterproof()...
这些抽象应该实现接口IToggle
3、设计具体厂家的防盗门,防水门。每个门都有一个厂家的标志(不可修改)。每个厂家也可以给自己的门增加新的功能。
4、写测试类测试上述实现。