目录
1. 为什么使用接口
为什么使用接口,前面我们学习了继承,我们都知道继承中子类只能继承一个直接父类,但很多场景下我们需要去继承多个父类,这该怎么办呢?这时接口就应运而生。
接口可以实现Java中的“多继承”
示例:
public interface Lock {} //接口
public interface DoorBell {} //接口
public class Door {} //父类
public class SecurityDoor extends Door implements Lock,DoorBell{} //子类
2. 什么是接口
- 接口的关键字是interface
- 接口的所有方法都是默认用public abstract修饰的(写与不写都可)
- 接口不能实例化
- 实现类必须实现接口的所有方法
- 实现类可以实现多个接口
- 接口中的变量都是静态常量
3. 创建接口的步骤
(1)创建接口
(a)第一种方式创建,class修改为interface
(b)第二种方式创建,直接创建interface
public interface USB {
void charge();
}
(2)创建实现类
public class Phone implements USB{
@Override
public void charge() {
System.out.println("充电");
}
}
(3)调用接口
public class Test {
public static void main(String[] args) {
USB usb = new Phone();
usb.charge();
}
}
4. 接口是一种能力
公式:A has B【A拥有B 的能力(功能)】
===》推导出A implements B 【B是接口,A是实现类】
5. 接口是一种约定
1. 有些接口没有名称,没有方法
2. 有些接口需要通过注释约定接口的实现规则
6. 面向对象接口编程实例
开发打印机
墨盒:彩色、黑白
纸张类型:A4、B5
墨盒和纸张都不是打印机厂商提供的
打印机厂商要兼容市场上的墨盒、纸张
墨盒和纸张的规格是一种约定
打印机需要遵守这些约定
用面向接口编程的方式开发
制定墨盒、纸张的约定或标准
打印机厂商使用墨盒、纸张的标准开发打印机
其他厂商按照墨盒、纸张的标准生产墨盒、纸张
public interface MoHe {
String getMoHe();
}
public interface Paper {
String getPaperType();
}
public class A4Paper implements Paper{
@Override
public String getPaperType() {
return "A4";
}
}
public class B5Paper implements Paper{
@Override
public String getPaperType() {
return "B5";
}
}
public class ColorMoHe implements MoHe{
@Override
public String getMoHe() {
return "彩色墨盒";
}
}
public class WhiteMoHe implements MoHe{
@Override
public String getMoHe() {
return "黑白墨盒";
}
}
public class Printer {
private MoHe mohe;
private Paper paper;
public void print(){
System.out.println("使用"+getMohe()+"在"+getPaper()+"纸张上打印");
}
public MoHe getMohe() {
return mohe;
}
public void setMohe(MoHe mohe) {
this.mohe = mohe;
}
public Paper getPaper() {
return paper;
}
public void setPaper(Paper paper) {
this.paper = paper;
}
}
public class Test {
public static void main(String[] args) {
Printer printer = new Printer();
MoHe moHe = new ColorMoHe();
printer.setMohe(moHe);
Paper paper = new A4Paper();
printer.setPaper(paper);
printer.print();
}
}