文章目录
- 接口语法
- 注意事项和细节
- 实现接口VS.继承类
- 接口的多态特性
- 小练习
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 {
@Override
public void start() {
System.out.println("相机开始工作.......");
}
@Override
public void stop() {
System.out.println("相机停止工作");
}
}
Phone.java
public class Phone implements UsbInterface {
@Override
public void start() {
System.out.println("手机开始工作....");
}
@Override
public 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…
注意事项和细节
- 接口不能被实例化
- 接口中所有的方法是public方法, 接口中抽象方法可以不用abstract修饰
- 一个普通类实现(
implements
)接口,就必须将该接口的所有方法都实现 - 抽象类实现接口, 可以不用实现接口的所有方法
- 一个类可以同时实现多个接口
- 接口中的属性只能是
final
的, 而且是public static final
修饰符 - 接口中属性的访问形式:
接口名.属性名
- 接口不能继承其他的类, 但是可以继承多个别的接口
- 接口的修饰符只能是public和默认, 这点和类的修饰符是一样的
实现接口VS.继承类
继承的价值主要在于:解决代码的复用性和可维护性。
接口的价值主要在于:设计,设计好各种规范(方法),让其它类去实现这些方法。即更加的灵活…
接口比继承更加灵活, 继承是满足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.x
System.out.println(A.x + " " + super.x);
}
public static void main(String[] args) {
new C().pX();
}
}