default
在写接口AsyncConfigurer
的实现类时,IDE居然没有强制要求实现接口中的方法,感觉很是奇怪,因此查看其源码:
public interface AsyncConfigurer {
@Nullable
default Executor getAsyncExecutor() {
return null;
}
@Nullable
default AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
}
发现有一个default
关键字,后来在网上查看资料才知晓这是jdk1.8的一个新特性:
1.可以有且必须有方法体
2.实现类可以不重写该方法,此时会调用接口方法
3.若实现类重写了该方法,此时调用实现类中的方法
创建一个Person
接口
public interface Person {
default void say() {
System.out.println("I'm a person");
}
}
Student
实现Person
接口
public class Student implements Person {
public static void main(String[] args) {
Student t = new Student();
t.say();
}
}
输出:
I'm a person
修改Student
实现类
public class Student implements Person {
@Override
public void say() {
System.out.println("I'm a student");
}
public static void main(String[] args) {
Student t = new Student();
t.say();
}
}
输出
I'm a student
static
在jdk1.7是不可能将接口中的方法修饰成static
的
public interface Person {
static void say() {
System.out.println("I'm a person");
}
}
使用方式: ClassName.staticMethod
public class Student {
public static void main(String[] args) {
Person.say();
}
}
·