接口
1. 接口的基本介绍
接口就是给出一些没有实现的方法,封装到一起,到某个类使用的时候,在根据具体情况把这些方法写出来
1.1 语法
interface 接口名 {
// 属性
// 方法
}
class 类名 implements 接口 {
自己的属性;
自己的方法;
必须实现接口的抽象方法;
}
1.2 小结
- 在JDk7.0前的接口里的所有方法都没有方法体。
- 在JDK8.0后的接口可以有静态方法,默认方法,也就是接口中可以有方法的具体实现。注:需要加上default或static关键字。
2. 接口的应用场景
2.1 实际需求
3个程序员,编写三个类,分别完成对Mysql,Oracle,DB2数据库的连接 connect,close…
若三个程序员命名的方法都不一样,那么项目代码管理十分繁琐。若写一个接口,在其中规定两个方法,三个程序员都要实现这三个方法,那么方法名得到统一,便于后期代码管理。
2.2 具体代码
public interface DBInterface {
void connect();
void close();
}
public class DBMysql implements DBInterface {
public void connect() {
System.out.println("连接Mysql数据库...");
}
public void close() {
System.out.println("关闭Mysql数据库...");
}
}
还有两种数据库就不一一举例,实现方式大同小异。
// 测试代码
public class InterfaceTest {
public static void main(String[] args) {
DbMysql mysql = new DBMysql();
// 如果使用其他数据库,只需要更改参数即可
t(mysql);
}
public static void t(DBInterface db) {
db.connect();
db.close();
}
}
3. 接口使用细节
接口不能被实例化。
接口中所有方法的修饰符都是public,接口中的抽象方法可以不用abstract关键字修饰。
// 二者在本质上相等: void connect() abstract void connect();
普通类实现接口必须实现接口中所有的方法。
抽象类实现接口不用实现接口中的方法。
一个类可以实现多个接口。
接口中的所有属性都是public static final修饰的。
接口中属性的访问形式:接口名.属性名
接口不能继承其他类,但是可以继承多个其他接口。
interface A extends B, C { }
接口的修饰符只能是public和默认,这和类是一样的。
4. 接口和继承
当子类继承了父类,就拥有了父类的功能。如果子类需要拓展原有的功能,就可以使用实现接口这个机制。
以下是同时运用继承和接口的案例:
public class ExtendsVsInterface {
public static void main(String[] args) {
LittleMonkey wuKong = new LittleMonkey("悟空");
wuKong.climbing();
wuKong.swimming();
wuKong.flying();
}
}
public class Monkey {
private String name;
public Monkey(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void climbing() {
System.out.println("猴子会爬树...");
}
}
// 接口
public interface Fishable {
void swimming();
}
public interface Birdable {
void flying();
}
// 继承
public class LittleMonkey extends Monkey implements Fishable, Birdable {
public LittleMonkey(String name) {
super(name);
}
@Override
public void swimming() {
System.out.println(getName() + "通过学习可以游泳...");
}
@Override
public void flying() {
System.out.println(getName() + "通过学习可以飞翔...");
}
}
继承是需要满足is - a的关系。但接口只需要满足like - a的关系。
接口在一定程度上实现代码解耦。
5. 接口的多态特性
5.1 代码实现
public class Interface01 {
public static void main(String[] args) {
// 创建手机, 相机对象
Phone phone = new Phone();
Camera camera = new Camera();
// 创建计算机
Computer computer = new Computer();
computer.work(phone); // 把手机接入到计算机
computer.work(camera); // 把相机接入到计算机
}
}
public interface UsbInterface { // 接口
// 规定接口的相关方法
public void start();
public void stop();
}
// Phone类实现UsbInterface接口
// 解读 1. Phone类需要实现UsbInterface接口声明的方法
public class Phone implements UsbInterface {
@Override
public void start() {
System.out.println("手机开始工作.");
}
@Override
public void stop() {
System.out.println("手机停止工作.");
}
}
public class Camera implements UsbInterface{ // 实现接口
@Override
public void start() {
System.out.println("相机开始工作.");
}
@Override
public void stop() {
System.out.println("相机停止工作.");
}
}
public class Computer {
public void work(UsbInterface usbInterface) {
usbInterface.start();
usbInterface.stop();
}
}
5.2 解析
在前面的Usb接口案例,UsbInterface usbInterface,既可以接收手机对象,又可以接收相机对象,就体
现了接口与多态(接口引用可以指向实现了接口的类的对象)
注:第一次发文,请多多支持! ★,°:.☆( ̄▽ ̄)/$:.°★ 。
本文含有隐藏内容,请 开通VIP 后查看