usb插槽就是现实中的接口。
你可以把手机,相机,u盘都插在usb插槽上,而不用担心那个插槽是专门插哪个的,原因是做usb插槽的厂家和做各种设备的厂家都遵守了统一的规定包括尺寸,排线等等。
首先创建Usb接口 UsbInterface.java
package src.interface_;public interface UsbInterface {public void start();public void stop();
}
Camera.java
package src.interface_;public class Camera implements UsbInterface {@Overridepublic void start() {System.out.println("相机开始工作.......");}@Overridepublic void stop() {System.out.println("相机停止工作");}
}
Phone.java
public class Phone implements UsbInterface {@Overridepublic void start() {System.out.println("手机开始工作....");}@Overridepublic void stop() {System.out.println("手机停止工作.....");}
}
最后我们模拟电脑工作时候的流程, 插入设备开始 - 然后结束
package src.interface_;public class Computer {public void work(UsbInterface usbInterface) {usbInterface.start();usbInterface.stop();}
}
我们实例化各个类试试 TestInterface.java
package src.interface_;public class TestInterface {public static void main(String[] args) {Camera camera = new Camera();Phone phone = new Phone();// 创建计算机Computer computer = new Computer();// 模拟把相机插入电脑computer.work(camera);// 模拟把手机插入电脑computer.work(phone);}
}
interface 接口名{//属性//方法
}
class 类名 implements 接口{自己属性;自己方法;必须实现的接口的抽象方法;
}
在jdk7.0前, 接口里的所有方法都没有方法体;
jdk8.0后接口类可以有静态方法, 默认方法, 也就是说接口中可以有方法的具体实现.
对初学者讲理解接口的概念不算太难,难的是不知道什么时候使用接口,下面我例举几个应用场景:
1.说现在要制造战斗机,武装直升机.专家只需把飞机需要的功能/规格定下来即可,然后让别的人具体实现就可。
2.说现在有一个项目经理,管理三个程序员,功能开发一个软件为了控制和管理软件项目经理可以定义一些接口,然后由程序员具体实现。
实际要求: 3个程序员, 编写三个类,分别完成对Mysql,Oracle,DB2数据库的连接connect, close…
implements
)接口,就必须将该接口的所有方法都实现final
的, 而且是public static final
修饰符接口名.属性名
继承的价值主要在于:解决代码的复用性和可维护性。
接口的价值主要在于:设计,设计好各种规范(方法),让其它类去实现这些方法。即更加的灵活…
接口比继承更加灵活, 继承是满足is - a的关系,而接口只需满足like - a的关系
接口在一定程度上实现代码解耦[即:接口规范性+动态绑定]
在前面的Usb接口案例,UsbInterface usb
,既可以接收手机对象,又可以接收相机对象,就体现了接口多态(接口引用可以指向实现了接口的类的对象)
演示一个案例:给Usb数组中,存放Phone和相机对象,Phone类还有一个特有的方法call() ,请遍历Usb数组,如果是Phone对象,除了调用Usb接口定义的方法外,还需要调用Phone特有方法call.
接口存在多态传递现象.
interface A {int x = 0;// 等价于 public static final int x=0
}class B {int x = 1;// 普通属性
}public class C extends B implements A {public void pX() {// System.out.println(x); //错误,x不明确// 可以明确的指定x// 访问接口的x就是用A.x// 访问父类的x就是用super.xSystem.out.println(A.x + " " + super.x);}public static void main(String[] args) {new C().pX();}
}