default关键字在JDK8中有两个用处。
1.在switch语句的时候使用default
int gender = 3; String genderString; switch (gender) { case 1: genderString = "male"; break; case 2: genderString = "female"; break; break; //如果case没有匹配的值,那么肯定是LGBT default: genderString = "LGBT"; break; } System.out.println(genderString);
当case里的值与switch里的key没有匹配的时候,执行default里的方法。
2. 在定义接口的时候使用default来修饰具体的方法
interface IntefercaeDemo { //具体方法 default void showDefault(){ System.out.println("this is showDefault method"); } //具体方法 static void showStatic(){ System.out.println("this is showStatic method"); } //没有实现的抽象方法 void sayHi(); } class LearnDefault implements IntefercaeDemo{ //实现抽象方法 @Override public void sayHi() { System.out.println("this is sayHi mehtod"); } public static void main(String[] args) { //接口中被static所修饰的具体方法 IntefercaeDemo.showStatic(); //将实现了IntefercaeDemo的类实例化 LearnDefault learnDefault = new LearnDefault(); //被Default所修饰的具体方法可以通过引用变量来调用 learnDefault.showDefault();
JDK8中为了加强接口的能力,使得接口可以存在具体的方法,前提是方法需要被default或static关键字所修饰。
这样做的好处是接口的每个实现类如果都想要相同的功能,就不需要重复代码,而是在接口进行定义即可。
默认方法在子类也可以被重写。