1. 默認(rèn)方法
1.1 語(yǔ)法
??默認(rèn)方法就是一個(gè)在接口里面有了可以實(shí)現(xiàn)的方法薪缆。在jdk8之前,interface之中可以定義變量和方法伞广,變量必須是public拣帽、static、final的嚼锄,方法必須是public减拭、abstract的,這些修飾符都是默認(rèn)的区丑。public 抽象方法需要子類實(shí)現(xiàn)拧粪。在JDK 1.8開(kāi)始 支持使用static和default 修飾 可以寫方法體修陡,不需要子類重寫。
1.2 實(shí)例
public class Java8Tester {
public static void main(String args[]) {
Vehicle vehicle = new Car();
vehicle.print();
}
}
interface Vehicle {
/**
* 默認(rèn)方法 可以寫方法體
*/
default void print() {
System.out.println("我是一輛車!");
}
/**
* 靜態(tài)方法 可以寫方法體
*/
static void blowHorn() {
System.out.println("按喇叭!!!");
}
}
interface FourWheeler {
/**
* 默認(rèn)方法 可以寫方法體
*/
default void print() {
System.out.println("我是一輛四輪車!");
}
}
class Car implements Vehicle, FourWheeler {
/**
* 默認(rèn)和靜態(tài)方法不是我們的抽象方法 可霎,所以不需要重寫
*/
public void print() {
Vehicle.super.print();
FourWheeler.super.print();
Vehicle.blowHorn();
System.out.println("我是一輛汽車!");
}
}
執(zhí)行以上腳本魄鸦,輸出結(jié)果為:
我是一輛車!
我是一輛四輪車!
按喇叭!!!
我是一輛汽車!
1.3 多個(gè)默認(rèn)方法
一個(gè)接口有默認(rèn)方法,考慮這樣的情況癣朗,一個(gè)類實(shí)現(xiàn)了多個(gè)接口号杏,且這些接口有相同的默認(rèn)方法,以下實(shí)例說(shuō)明了這種情況的解決方法
第一個(gè)解決方案是創(chuàng)建自己的默認(rèn)方法斯棒,來(lái)覆蓋重寫接口的默認(rèn)方法:
public class Car implements vehicle, fourWheeler {
@Override
public void print() {
System.out.println("我是一輛四輪汽車!");
}
}
第二種解決方案可以使用 super 來(lái)調(diào)用指定接口的默認(rèn)方法:
public class Car implements vehicle, fourWheeler {
@Override
public void print() {
vehicle.super.print();
}
}