App下載

Java 8 中的默認(rèn)方法和多重繼承

回憶的沙漏 2021-09-04 17:20:54 瀏覽數(shù) (2295)
反饋

多重繼承是一些面向?qū)ο蟮挠嬎銠C編程語言的一個特性,其中一個對象或類可以從多個父對象或父類繼承特性和特性。

Java 8 中的默認(rèn)方法可以看作是一種多重繼承的形式(除了屬性不能被繼承)??紤]下面的示例,?Button? 類實現(xiàn)了兩個接口 - ?Clickable? 和 ?Accessible?。

默認(rèn)方法-java-8

每個接口定義一個默認(rèn)方法。因此,?Button? 類可以從兩個接口調(diào)用方法。這就像多重繼承。

interface Clickable{
	default void click(){
		System.out.println("click");
	}
}
 
interface Accessible{
	default void access(){
		System.out.println("access");
	}
}
 
public class Button implements Clickable, Accessible {
 
	public static void main(String[] args) {
		Button button = new Button();
		button.click();
		button.access();
	}
}

如果兩個實現(xiàn)的接口都定義了一個具有相同方法簽名的默認(rèn)方法,那么實現(xiàn)類不知道使用哪個默認(rèn)方法。實現(xiàn)類應(yīng)該明確指定要使用的默認(rèn)方法或定義它自己的方法。在下面的示例中,?Clickable? 和 ?Accessible? 都定義了 ?print()? 方法。在 ?Button? 類中,?print()? 方法指定了默認(rèn)方法。

default-methods-java-8-same-name

interface Clickable{
	default void click(){
		System.out.println("click");
	}
 
	default void print(){
		System.out.println("Clickable");
	}
}
 
interface Accessible{
	default void access(){
		System.out.println("access");
	}
 
	default void print(){
		System.out.println("Accessible");
	}
}
 
public class Button implements Clickable, Accessible {
 
	public void print(){
		Clickable.super.print();
		Accessible.super.print();
	}
 
	public static void main(String[] args) {
		Button button = new Button();
		button.click();
		button.access();
		button.print();
	} 
}

默認(rèn)方法背后的主要動機是,如果在某個時候我們需要向現(xiàn)有接口添加一個方法,我們可以在不更改現(xiàn)有實現(xiàn)類的情況下添加一個方法。這樣,接口仍然兼容舊版本。這是一個很酷的功能。但是,我們應(yīng)該記住使用默認(rèn)方法的動機,并應(yīng)該保持接口和實現(xiàn)的分離。


0 人點贊