接口
接口概述
- 接口是一种规范,使用接口就代表着要在程序中制定规范.
制定规范可以给不同类型的事物定义功能,例如:
- 利用接口,给飞机、小鸟制定飞行规范,让其都具备飞行的功能;
- 利用接口,给鼠标、键盘、音响制定连接规范,让其都具备连接的功能;
接口制定规范通常只规定有哪些功能,不限制功能的具体内容。需要由遵循规范的事物自己去实现,例如:
- 飞行规范只是让飞机、小鸟具备飞行的功能,但具体怎么飞,由它们自己决定
- 连接规范只是让鼠标、键盘、音响都拥有可以被连接的功能,但具体怎么连接,由它们自己决定
接口的定义格式
public interface Inter {
// 常量
// 抽象方法
}
注意:
- 接口中的变量必须是常量,默认被 public static final 修饰
- 接口中的方法默认是抽象方法,默认被 public
abstract 修饰 - 接口不能创建对象
接口的使用方式
接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类
- 接口可以被类单实现,也可以被类多实现
- 注意:一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类
修饰符 class 实现类 implements 接口1, 接口2, 接口3 , ... {
……
}
接口和抽象类的区别
- 一个类只能继承一个抽象类,一个类可以实现多个接口。
- 继承父类和实现接口并不冲突,可以同时使用。
- 功能上:抽象类是对同一类型事物的抽取
(例如:猫和狗),接口是对不同类型事物具有相同行为的规范。
实例1:
public class Demo01 {
public static void main(String[] args) {
//需求:定义一个数学接口MathInter,给其定义成员变量PI(圆周率)和成员方法add(加法)
//1.定义好接口后,尝试创建MathInter对象,代码报错(接口不能创建对象)
//new MathInter();
//2.使用MathInter提供的圆周率
System.out.println(MathInter.PI);
//3.尝试修改圆周率
//MathInter.PI = 6.66;
//4.要想使用接口,需要定义类去实现接口
//定义Computer电脑类,实现Math数学接口
//5.创建实现类对象,调用重写的方法
Computer computer = new Computer();
computer.add(1, 2);
//6.需求:再定义一个播放接口PlayerInter,制定播放规范,让Computer去实现
computer.play();
}
}
public interface MathInter {
//2.要求有圆周率提供给其他人使用
//public static final double PI = 3.14;
//注意:接口中的成员变量只能是常量,默认被 public static final
double PI = 3.14;
//3.要求有加法
//public abstract void add(int a, int b);
//接口中的方法默认就被 public abstract修饰
void add(int a, int b);
}
public interface PlayerInter {
void play();
}
public class Computer implements MathInter, PlayerInter {
//2.类实现接口,必须要重写接口的所有抽象方法!
@Override
public void add(int a, int b) {
System.out.println("加法结果:" + (a + b));
}
@Override
public void play() {
System.out.println("播放小视频");
}
}
实例二:
定义USB接口制定规范,要求所有USB设备都拥有接入(connect)和断开(disconnect)功能
- 定义Mouse鼠标类和Keyboard键盘类,要求实现USB接口,遵循USB制定的规范
- Mouse鼠标的特有功能:点击(click)
- Keyboard键盘的特有功能:打字( typewrite )
1.定义UsbInter接口,制定规则:接入(connect)和断开(disconnect)
public interface UsbInter {
void connect();
void disconnect();
}
2.定义鼠标Mouse类和键盘Keyboard类作为接口实现类,重写接口的方法
public class Keyboard implements UsbInter {
@Override
public void connect() {
System.out.println("接入键盘");
}
@Override
public void disconnect() {
System.out.println("断开键盘");
}
//2.特有功能:打字
public void typewrite() {
System.out.println("键盘敲烂,月薪过万!");
}
}
public class Mouse implements UsbInter{
@Override
public void connect() {
System.out.println("鼠标连接");
}
public void Click(){
System.out.println("鼠标点击");
}
@Override
public void disconnect() {
System.out.println("鼠标断开");
}
}
3.分别创建Mouse鼠标对象和Keyboard键盘对象
public class Demo02 {
public static void main(String[] args) {
Mouse mouse = new Mouse();
Keyboard keyboard = new Keyboard();
//依次调用usb的接入方法、各自特有的方法、usb的断开方法
mouse.connect();
mouse.click();
mouse.disconnect();
System.out.println("-----------------");
keyboard.connect();
keyboard.typewrite();
keyboard.disconnect();
}
}