接口的格式如下:
- 接口用关键字interface来定义
public interface 接口名{
//常量
//抽象方法
}
- JDK8之前接口中只能是抽象方法和常量,没有其他成分了
- 接口不能实例化
- 接口中的成员都是public修饰的,写不写都是,因为规范的目的是为了公开化
接口的用法
- 接口是用来被类实现(implements)的,实现接口的类称为实现类,接口可以被类多实现
- 一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义为抽象类
- 接口可以继承多个接口
接口多继承的作用
- 整合多个接口为同一个接口,便于子类实现
接口的默认方法
JDK8接口中可以写默认方法,但必须带有default关键字修饰,其实默认方法是被public修饰的,子类可以直接调用
package com.wmx.test;
public interface Animal {
default void run() {
System.out.println("动物跑起来");
}
}
class Pig implements Animal {
}
class Test01 {
public static void main(String[] args) {
Pig pig = new Pig();
pig.run();
}
}
反编译后
Compiled from "Animal.java"
public interface com.wmx.test.Animal {
public void run();
}
静态方法
默认会public修饰,必须static修饰,切必须使用接口名来调用
package com.wmx.test;
public interface Animal {
static void run() {
System.out.println("动物要跑");
}
}
class Pig implements Animal {
}
class Test01 {
public static void main(String[] args) {
// Pig.run(); 报错
Animal.run();
}
}
私有方法
JDK9才开始出现,只能在本类中被其他默认方法或者私有方法访问
package com.wmx.test;
public interface Animal {
private void run() {
System.out.println();
}
default void run01(){
run();
}
}
class Pig implements Animal {
}
class Test01 {
public static void main(String[] args) {
Pig pig = new Pig();
// pig.run(); 报错
}
}
接口注意事项
- 接口不能创建对象
- 一个类实现多个接口,多个接口中有同样的静态方法不冲突
- 一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法,默认用父类的
- 一个类实现了多个接口,多个接口中存在同名默认方法,不冲突,这个类重写该方法即可
- 一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承