Java接口
接口的概念
接口(Interface),在Java编程语言中是一个抽象类型,是常量值和抽象方法定义的集合,接口通常以interface来声明。一个类通过实现接口的方式,从而来实现接口的抽象方法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法,只是方法的定义,没有方法体
通俗地理解接口
在现实生活中,接口是什么呢?它可以是笔记本上的USB口,电源插座等
那么这些接口在实现意义上以及使用标准上也有所不同
- 电脑的USB口上,可以插:U盘、鼠标、键盘…所有符合USB协议的设备
- 电源插座插孔上,可以插:电脑、电视机、电饭煲…所有符合规范的设备
通过上述的例子我们就可以看出:接口就是公共的行为规范标准,在实现时,只要符合规范标准,就可以通用。在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型
Java中存在接口的意义
- 为了实现多态性
- 减少代码的书写
- 提高了代码的可维护性和扩展性
- 在团队合作中,提高代码的规范性
定义接口
Java 接口的定义方式与类基本相同,不过接口定义使用的关键字是 interface,接口定义的语法格式如下:
[public] interface 接口名称 {
// 接口体,其中可以包含定义常量和声明方法
[public] [static] [final] 数据类型 变量名 = 值; // 定义常量
[public] [abstract] 返回值类型 方法名(参数列表); // 声明方法
}
举个例子:

实现接口
接口不能直接实例化使用,必须要有一个类去实现它,实现接口中所有的抽象方法。
当类实现接口的时候,类要实现接口中所有的方法,即重写接口中的方法。否则,类必须声明为抽象的类。
类使用implements关键字实现接口,一个类可以实现一个或多个接口。在类声明中,implements关键字放在class变量名后面。
实现接口的语法:
<修饰符> class <类名> [extends 父类名] [implements 接口名1[, 接口名2…]] {
// 主体
}
举个例子

实现接口需要注意以下几点:
- 实现接口与继承父类相似,一样可以获得所实现接口里定义的常量和方法。如果一个类需要实现多个接口,则多个接口之间以逗号分隔。
- 一个类只能继承一个类,但是能实现多个接口。
- 一个类可以继承一个父类,并同时实现多个接口,implements 部分必须放在 extends 部分之后。
- 一个类实现了一个或多个接口之后,这个类必须完全实现这些接口里所定义的全部抽象方法(也就是重写这些抽象方法);否则,该类将保留从父接口那里继承到的抽象方法,该类也必须定义成抽象类。
Java接口可以继承吗?
Java接口可以继承,而且是可以多继承,但是只能是接口继承接口,类只能实现接口。一个接口可以继承另一个或多个接口,一个普通类可以实现多个接口。
接口的继承
一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。
实现接口继承的语法:
[public] interface 接口名称 extends 接口名1[, 接口名2,…]{
//主体
}
下面的TimeService接口被UserService接口继承:
public interface TimeService {
void timer();
}
public interface UserService extends TimeService{
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
那么UserService接口中就有5个方法了,实现UserService接口的类则必须实现这5个方法,其中1个方法来自于TimeService接口
注意:一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。
接口的多继承
在Java中,类的多继承是不合法,但接口允许多继承。
在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。
public interface ChaseService extends TimeService,UserService{
}
以上的程序片段是合法定义的子接口,与类不同的是,接口允许多继承,而 TimeService及 UserService 可以定义或是继承相同的方法
接口与类的区别:
- 接口不能用于实例化对象。
- 接口没有构造方法。
- 接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法。
- 接口不能包含成员变量,除了 static 和 final 变量。
- 接口不是被类继承了,而是要被类实现。
- 接口支持多继承。
抽象类和接口的区别
-
抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
-
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
-
接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
-
一个类只能继承一个抽象类,而一个类却可以实现多个接口。
注:JDK 1.8 以后,接口里可以有静态方法和方法体了。
注:JDK 1.8 以后,接口允许包含具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰。更多内容可参考 Java 8 默认方法。
注:JDK 1.9 以后,允许将方法定义为 private,使得某些复用的代码不会把方法暴露出去。更多内容可参考 Java 9 私有接口方法。
接口特性
- 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
- 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
- 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
接口的注意点:
- 接口作为约束,成为一种规范,就像法律一样,制定好后大家都遵守
- 定义一些方法,让不同的人实现。比如定义了一个接口,10个人去实现,就得到了10种不同的实现方式
- 定义的方法时默认public abstract,可以省略不写
- 定义属性时,用静态常量写,public static final,一般不建议在接口中写属性
- 接口不能包含成员变量,除了 static 和 final 变量。
- 接口不能被实例化,因为接口不是类,没有构造方法
- 通过关键字implement 可以实现多个接口,利用接口,实现多继承
- 必须要重写接口中的方法
- 因为接口的方法默认是public类型的,所以在实现的时候一定要用public来修饰(否则默认为protected类型,缩小了方法的使用范围)。
此学习资料参考于

浙公网安备 33010602011771号