鍍金池/ 教程/ Java/ Java8默認(rèn)方法
Java8數(shù)據(jù)流
Java8默認(rèn)方法
Java8 Optional類
Java8 Base64
Java8期間及持續(xù)時(shí)間
Java8函數(shù)式接口
Java8 日期時(shí)間API
Java8 本地DateTime API
Java8教程
Java8 Lambda表達(dá)式
Java8環(huán)境設(shè)置
Java8向后兼容
Java8 時(shí)間調(diào)節(jié)器
Java8 ChronoUnits枚舉
Java8方法引用
Java8 Nashorn JavaScript引擎
Java8 時(shí)區(qū)DateTime API

Java8默認(rèn)方法

Java8引入的接口默認(rèn)方法實(shí)現(xiàn)一個(gè)新的概念。此功能是為了向后兼容性增加,使舊接口可用于利用JAVA8。 lambda表達(dá)式的能力,例如,列表或集合接口不具備forEach方法聲明。從而增加了這樣的方法只會打破收集框架實(shí)現(xiàn)。 Java8引入了默認(rèn)的方法使列表/Collection接口可以擁有forEach默認(rèn)方法,并實(shí)行類實(shí)現(xiàn)這些接口不需要實(shí)現(xiàn)相同功能。

語法

public interface vehicle {
	default void print(){
		System.out.println("I am a vehicle!");
	}
}

多重默認(rèn)

在接口默認(rèn)方法,它們是一類實(shí)現(xiàn)兩個(gè)接口使用相同的默認(rèn)方法,那么如何解決這種模糊性??紤]下面的情況。

public interface vehicle {
	default void print(){
		System.out.println("I am a vehicle!");
	}
}
public interface fourWheeler {
	default void print(){
		System.out.println("I am a four wheeler!");
	}
}

第一個(gè)解決方案是創(chuàng)建一個(gè)自己的方法,并覆蓋默認(rèn)實(shí)現(xiàn)。

public class car implements vehicle, fourWheeler {
	default void print(){
		System.out.println("I am a four wheeler car vehicle!");
	}
}

第二個(gè)解決方法是調(diào)用使用超指定接口的默認(rèn)方法。

public class car implements vehicle, fourWheeler {
	default void print(){
		vehicle.super.print();
	}
}

靜態(tài)默認(rèn)方法

現(xiàn)在,從Java8起接口也可以有靜態(tài)輔助方法。

public interface vehicle {
	default void print(){
		System.out.println("I am a vehicle!");
	}
	static void blowHorn(){
		System.out.println("Blowing horn!!!");
	}
}

默認(rèn)方法示例

使用所選擇的任何編輯器創(chuàng)建下面的java程序 C:/> JAVA

Java8Tester.java
public class Java8Tester {
   public static void main(String args[]){
      Vehicle vehicle = new Car();
      vehicle.print();
   }   
}

interface Vehicle {
   default void print(){
      System.out.println("I am a vehicle!");
   }
   static void blowHorn(){
      System.out.println("Blowing horn!!!");
   }
}

interface FourWheeler {
   default void print(){
      System.out.println("I am a four wheeler!");
   }
}

class Car implements Vehicle, FourWheeler {
   public void print(){
      Vehicle.super.print();
      FourWheeler.super.print();
	  Vehicle.blowHorn();
      System.out.println("I am a car!");
   }
}

驗(yàn)證結(jié)果

使用javac編譯器編譯如下類

C:\JAVA>javac Java8Tester.java

現(xiàn)在運(yùn)行Java8Tester看到的結(jié)果

C:\JAVA>java Java8Tester

看到結(jié)果。

I am a vehicle!                                                          
I am a four wheeler!  
Blowing horn!!!                                                   
I am a car!