認識接口:
Java提供了一個關鍵字Interface,用這個關鍵字我們可以定義一個特殊的結構:接口。
接口不能創建對象。
注意:接口不能創建對象,接口是用來被類實現(implements)的,實現接口的類稱為實現類。
一個類可以實現多個接口(接口可以理解為干爹),實現類實現多個接口,必須重寫全部接口的全部抽象方法,否則實現類需要定義成抽象類。
父類只有一個,干爹能有多個。
抽象類是需要繼承的,繼承只能單繼承,你如果繼承了抽象類,那你就不能繼承其他類。
package cn.ensource.d7_interface;// 實現類
public class D implements B, C{@Overridepublic void testb1() {}@Overridepublic void testb2() {}@Overridepublic void testc1() {}@Overridepublic void testc2() {}
}
接口的好處(重點)
1)彌補了類單繼承的不足,一個類同時可以實現多個接口;
2)讓程序員可以面向接口編程, 這樣程序員就可以靈活方便地切換各種業務實現。
我們可以多創建幾個方法,何必要通過接口來實現呢?
這個是特別有必要的。
其實可以理解為不是每個人都會所有人都會的,得靠具體實現的這個人到底會什么,接口就相當于這個實例化的人會的技能。
開發的時候接口是別人寫的,你是調別人的,所以具體的內容不是你寫的。
這樣寫的話,邏輯清晰,一看就看出哪里是重點,后期好維護。
使用接口可以輕松方便地新建類,而不是在已有類中修改。
implement接口可以顯現地知道你是誰,能做什么?
一個接口被多個類實現,有什么好處呢?
面向接口編程。
package cn.ensource.d8_interface2;public class Test {public static void main(String[] args) {// 目標:搞清楚使用接口的好處Driver s = new A();s.drive();Driver d = new B(); // 程序可以面向接口進行編程d.drive(); // 父類類型指向子類對象 多態}
}class B implements Driver{@Overridepublic void drive() {}
}class A extends Student implements Driver, Singer{@Overridepublic void drive() {System.out.println("A可以driver");}@Overridepublic void sing() {System.out.println("A可以sing");}
}class Student {}interface Driver {void drive();
}interface Singer {void sing();
}
接口的好處:
解決類單繼承的問題,通過接口,我們可以讓一個類有一個親爹的同時,還可以找多個干爹去拓展自己的功能。
為什么我們要通過接口,也就是去找干爹,來拓展自己的功能呢?
因為通過接口去找干爹,別人通過你implements的接口,就可以顯現地知道你是誰,從而也就可以放心的把你當做誰來用了。
使用接口的第二個好處是什么?
一個類我們說可以實現多個接口,同樣,一個接口也可以被多個類實現的,這樣做的好處是我們的程序就可以面相接口編程了,這樣我們程序員就可以方便的靈活切換各種業務實現了。?而不用改后續代碼了。
接口不能實例化
接口如何實現實例化呢?參照多態的方式,通過實現類對象實例化,這叫接口多態。
多態的形式:具體類多態、接口類多態、接口多態。
接口的子類:
要么重寫接口中的所有抽象方法。
要么子類也是抽象方法。