接口使用interface来定义
Java中,接口和类是并列的两个结构
如何定义接口:定义接口中的成员
1. JDK7以前:只能定义全局常量和抽象方法
全局常量:public static final的,书写时,可以省略
抽象方法:public abstract的
2. JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法(略)
接口中不能定义构造器:接口不可以实例化
- Java开发中,接口通过让类去实现(implements)的方式来使用
- 如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化
- 如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类
- Java类可以实现多个接口 ——> 弥补了Java单继承性的局限性
格式:class AA extends BB implements CC,DD,EE
接口与接口之间可以继承,而且可以多继承
接口的具体使用,体现多态性
接口,实际上可以看做是一种规范
开发中,体会面向接口编程
package indi.cpc1270.java1;public class InterfaceTest {public static void main(String[] args) {System.out.println(Flyable.MAX_SPEED);System.out.println(Flyable.MIN_SPEED);Plane plane = new Plane();plane.fly();}}interface Flyable{//全局常量public static final int MAX_SPEED = 7900;public static final int MIN_SPEED = 1;//抽象方法public abstract void fly();void stop();}interface Attackable{void attack();}class Plane implements Flyable{@Overridepublic void fly() {System.out.println("通过引擎起飞");}@Overridepublic void stop() {System.out.println("驾驶员减速停止");}}abstract class Kite implements Flyable{@Overridepublic void fly() {}}class Bullet implements Flyable,Attackable,CC{@Overridepublic void attack() {// TODO Auto-generated method stub}@Overridepublic void fly() {// TODO Auto-generated method stub}@Overridepublic void stop() {// TODO Auto-generated method stub}@Overridepublic void method1() {// TODO Auto-generated method stub}@Overridepublic void method2() {// TODO Auto-generated method stub}}interface AA{void method1();}interface BB{void method2();}interface CC extends AA,BB{}
package indi.cpc1270.java1;public class USBTest {public static void main(String[] args) {Computer com = new Computer();Flash flash = new Flash();com.transferData(flash);}}class Computer{public void transferData(USB usb) {usb.start();System.out.println("传输数据");usb.stop();}}interface USB{void start();void stop();}class Flash implements USB{@Overridepublic void start() {System.out.println("U盘开启工作");}@Overridepublic void stop() {System.out.println("U盘结束工作");}}class Printer implements USB{@Overridepublic void start() {System.out.println("打印机开启工作");}@Overridepublic void stop() {System.out.println("打印机结束工作");}}
接口的应用:代理模式
package indi.cpc1270.java1;public class NetWorkTest {public static void main(String[] args) {Server server = new Server();ProxyServer proxyServer = new ProxyServer(server);proxyServer.browse();}}interface NetWork{public void browse();}class Server implements NetWork{@Overridepublic void browse() {System.out.println("真实的服务器访问网络");}}class ProxyServer implements NetWork{private NetWork work;public ProxyServer(NetWork work){this.work = work;}public void check() {System.out.println("联网之前的检查工作");}@Overridepublic void browse() {check();System.out.println("代理服务器联网");work.browse();}}
