接口
方法申明的集合,用来定义规范、标准
- 可以定义:抽象方法、常量、嵌套类型,从Java 8开始可以定义:默认方法、静态方法(类方法)
上述可以定义的内容都是隐试public的,因此可以省略public关键字
从Java 9 开始可以定义private方法 - 只能定义编译时常量,可以省略static、final
- 抽象方法可以省略abstract
- 不能自定义构造方法、不能定义(静态)初始化块、不能实例化
- 接口可以多继承
public interface Times {
final int a = 10;
static int b = 20;
int c = 30;
static final int d = 40;
public int e = 50;
abstract void print();
void show();
default void printTimesDefault() {
System.out.println("Times interface");
}
static void printTimesStatic() {
System.out.println(b);
}
}
接口的细节
- 接口名称可以在任何使用类型的地方使用
- 一个类可以通过implements关键字实现一个或多个接口
- 实现接口的类必须实现接口中定义的所有的抽象方法,除非他是抽象类
- 如果一个类实现的多个接口中有相同的抽象方法,只需要实现此方法一次
- extends和implements可以一起使用,implements必须写在extends的后面
- 当父类、接口找那个的方法签名一样时,那么返回值类型也必须一样
public interface Print { default void printPrintDefault() { System.out.println("Print interface"); } void text(); }
public class Text extends Object implements Print, Times { @Override public void print() { // TODO Auto-generated method stub System.out.println("Text print"); } @Override public void show() { // TODO Auto-generated method stub System.out.println("Text show"); } @Override public void text() { // TODO Auto-generated method stub System.out.println("Text text"); } }
- 一个接口可以通过extends关键字继承一个或者多个接口
public interface Show extends Print, Times { void show(); }
- 如果接口需要升级,比如增加新的抽象方法,会导致大幅的代码改动,以前实现接口的类都得改动。若想在不改动以前实现类的前提下进行接口升级,从Java 8开始,有2中方案
- 默认方法(default method)
用default修饰默认方法default void printTimesDefault() { System.out.println("Times interface"); }
- 静态方法(static method)
接口中定义的静态方法只能通过接口名调用,不能被继承static void printTimesStatic() { System.out.println(b); }
- 默认方法(default method)
网友评论