接口
大约 3 分钟
接口
基本介绍
接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来
语法
interface 接口名 {
属性
方法(1.抽象方法,2.默认实现方法,3.静态方法)
}
class 类名 implements 接口 {
自己属性
自己方法
必须实现的接口的抽象方法
}
注意
在Jdk7.0前 接口里的所有方法都没有方法体,即都是抽象方法
Jdk8.0后接口类可以有静态方法,默认方法,也就是说接口中可以有方法的具体实现
演示
public interface Interface01 {
public int n1 = 10;
// 在接口中 抽象方法可以省略 abstract 关键字
public void h1();
// 在jdk8 后,可以有默认的实现方法,需要使用 default 关键字
default public void ok(){
System.out.println("ok.....");
}
// 在 jdk8 后,可以有静态方法
// public void cry(){ 方法体 }
}
public class Interface02 {
public static void main(String[] args) {}
}
/**
* 1. implements 实现接口关键字
* 2.一个类实现接口,要将该接口的所有抽象方法都实现
* */
class L implements Interface01 {
@Override
public void h1() {
System.out.println("........");
}
}
使用场景
- 现在要制造战斗机,武装直升机,专家只需把飞机需要的功能/规格定下来即可,然后让别的人具体实现就可。
- 一个项目经理,管理三个程序员,功能开发一个软,为了控制和管理软件,项目经理可以定义一些接口,然后由程序员具体实现。
// Interface03DB 项目经理(接口)
public interface Interface03DB {
public void connect(); // 连接方法
public void close(); // 关闭连接
}
// A 程序员实现接口的方法
public class Interface03Mysql implements Interface03DB {
@Override
public void close() {
System.out.println("关闭连接DB");
}
@Override
public void connect() {
System.out.println("开始连接DB");
}
}
// B 程序员实现接口的方法
public class Interface03Org implements Interface03DB {
@Override
public void close() {
System.out.println("关闭连接Org");
}
@Override
public void connect() {
System.out.println("开始连接Org");
}
}
// 执行方法
public class InterFace03 {
public static void main(String[] args) {
Interface03Org interface03Org = new Interface03Org();
Interface03Mysql interface03Mysql = new Interface03Mysql();
t(interface03Org);
t(interface03Mysql);
}
public static void t(Interface03DB db){
db.connect();
db.close();
}
}
注意
接口不能被实例化
接口中所有的方法是 public 方法,接口中抽象方法,可以不用 abstract 修饰
一个普通类实现接口,就必须将该接口的所有方法都实现
抽象类实现接口,可以不用实现接口的方法
一个类同时可以实现多个接口
class Pig implements AA, BB, CC {}
接口中的属性,只能是 final 的,而且是 public static final 修饰符。
比如: int a=1; 实际上是 public static final int a=1; (必须初始化)
接口中属性的访问语句: 接口名 . 属性名
一个接口不能继承其它的类,但是可以继承多个其他接口 [举例]
interface IB {} interface IC {} interface IQ extends IB, IC {}
接口的修饰符 只能是 public 和默认,这点和类的修饰符是一样的
public interface IB {}
接口 和 继承类
解决问题不同
- 继承: 解决代码的复用性和可维护性
- 接口: 设计,设计好各种规范(方法),让其它类去实现这些方法
接口比继承更加灵活
继承是满足 is - a 的关系,而接口只需满足 like - a 的关系
接口在一定程度上实现代码解耦
接口的多态特性
- 多态参数
- 多态数组
- 接口存在多态传递现象