以前,接口里的方法要求全部是抽象方法,java8以后允許在接口里定義默認方法和類方法。不同的是:默認方法可以通過實現接口的類實例化的對象來調用,而類方法就相對於工具方法了。需要注意的是,此處的靜態方法只能被public修飾(或者省略不寫),不能是private或者protected。
好處:在Java 8 之前,接口不能有靜態方法,因此按照慣例,接口Type 的靜態工廠方法被放一個名為ypes 的不可實例化的伴生類中。例如Java Collections Framework的集合接口有45 個工具實現,分別提供了不可修改的集合、同步集合,等等。幾乎所有這些實現都通過靜態工廠方法在-個不可實例化的類( java . ut il. Collections ) 中導出。所有返回對象的類都是非公有的。現在的Collections Framework API 比導出45 個獨立公有類的那種實現方式要小得多,每種便利實現都對應一個類。這不僅僅是指API 數量上的減少,也是概念意義上的減少:為了使用這個API,用戶必須掌握的概念在數量和難度上都減少了。
interface DemoInterface {
default void doSomething() {
System.out.println("默認方法-->test1");
}
static void test() {
System.out.println("這個是一個靜態方法");
}
}
interface Demo1Interface {
default void doSomething() {
System.out.println("默認方法-->test2");
}
}
public class Test implements DemoInterface {
public static void main(String[] args) {
Test test = new Test();
test.doSomething();
DemoInterface.test();
//NutritionFacts tFacts = new NutritionFacts.Builder(1, 2).calotes(2).build();
}
}
/**
*
* 此類描述的是:實現兩個接口時,並且兩個接口的方法相同時,必須要實現
*
* @author: Aarony
* @version: 2019年5月24日 上午10:03:45
*/
public class Test1 implements DemoInterface, Demo1Interface {
public static void main(String[] args) {
Test1 test = new Test1();
test.doSomething();
}
// 假如下面是Demo1Interface,輸出test2,DemoInterface 輸出test1
@Override
public void doSomething() {
DemoInterface.super.doSomething();
// Demo1Interface.super.doSomething();
}
}
