这一部分是前后端分离和实际项目中分工合作的一个重要方法。
当我们去定义一个接口的时候,实际上我们是做了一个约定的方法而不去实现它。此时,对于前端人员来说,他不必关注后台方法的实现,只关注数据就可以,而所有后台人员在编写实现代码之前,都必须要保证自己写的方法符合这个借口,以方便调用。
之前一直搞不懂加入接口怎么就解耦了,调用方法不还是需要通过new一个实现类的对象来调用吗?原来是调用方法出错了。
示意图
我先实现一个接口使用的例子,然后再慢慢学习其他知识
示例情景:计算机有USB接口,接口可以链接鼠标、键盘、存储器,不过键盘的USB方法是“键入事件”,鼠标的方法是“点击事件”,存储器的方法是“存储事件”】
好了,下面实现代码:
1、接口USB
public interface USB {
public void write();//约定一个写入方法
public void read();//约定一个读入方法
default void readSth(USB usb) {//jdk8开始,接口可以有方法体了,而且不用在子类中实现
usb.read();
}
}
2、三个实现类
键盘
public class Keyboard implements USB {
//键盘实现类
@Override
public void write() {
// TODO Auto-generated method stub
}
@Override
public void read() {
// TODO Auto-generated method stub
System.out.println("键盘写入");
}
}
鼠标
public class Mouse implements USB {
@Override
public void write() {
// TODO Auto-generated method stub
}
@Override
public void read() {
// TODO Auto-generated method stub
System.out.println("鼠标点击");
}
}
磁盘
public class Disk implements USB {
@Override
public void write() {
// TODO Auto-generated method stub
}
@Override
public void read() {
// TODO Auto-generated method stub
System.out.println("磁盘读入");
}
}
3、使用类电脑
public class Computer {
//计算机输入了一些东西
public void readSth(USB u) {//这一句可以看出,接口也是可以当做数据类型的
u.read();
}
public static void main(String[] args) {
Computer c = new Computer();
//键盘输入
Keyboard kb = new Keyboard();
//鼠标输入
Mouse mouse = new Mouse();
//从磁盘读入
Disk disk = new Disk();
//而接口作为数据类型与父类一样,一切子类都可以输入了
c.readSth(kb);
c.readSth(mouse);
c.readSth(disk);
//另一种调用方式
kb.read();//这样写的话就与调用类的方法几乎没区别,个人不是很喜欢
}
}
网友评论