接口
接口是方法聲明的集合
-
接口的三個關(guān)鍵點
- 接口代表能力
- 接口代表約定
- 接口代表角色
如果一個方法暫時無法給出實現(xiàn) 那么可以將其聲明為抽象方法
抽象方法需要用abstract關(guān)鍵字修飾且沒有方法體
如果一個類中有抽象方法(說明這個類不完整)那么必須被聲明為抽象類
抽象類不能實例化(不能創(chuàng)建抽象類的對象)
抽象類是專門留給其他類去繼承的類
抽象類和接口本身不能實例化 但是可以使用就地實例化的方式來創(chuàng)建對象
所謂就地實例化實際上是創(chuàng)建了匿名內(nèi)部類(anonymous inner type)的對象接口之間可以繼承的而且允許多重繼承(一個接口繼承多個接口)
Java8+ ---> Lambda表達(dá)式 ---> 匿名函數(shù)
- 僅限接口中只有一個方法且沒有默認(rèn)方法的時候
okButton.addActionListener(e ->{
changeBgColor();
});
類和類之間簡單的說有三種關(guān)系:
- is-a - 繼承 - 學(xué)生和人
- has-a關(guān)系 - 關(guān)聯(lián)(聚合/合成) - 撲克和一張牌
- use-a關(guān)系 - 依賴 - 人和房子
類和它實現(xiàn)的接口之間的關(guān)系:
- play-a / like-a - 實現(xiàn)關(guān)系
重寫(置換汇四、覆蓋品追、覆寫): 父類有這個方法可能實現(xiàn)了可能沒實現(xiàn)子類把父類的這個方法重新實現(xiàn)一次(給出自己的實現(xiàn)版本)
- 例子 : 兒子繼承父親寥袭,實現(xiàn)和尚丁眼,音樂家接口
package com.baidu.test;
import com.baidu.Daddy;
import com.baidu.Monk;
import com.baidu.Musician;
import com.baidu.Son;
// 接口的三個關(guān)鍵點
// - 接口代表能力
// - 接口代表約定
// - 接口代表角色
public class Test02 {
public static void main(String[] args) {
Son son = new Son("白玉龍兒子");
son.gamble();
son.smoke();
son.chant();
son.eatVegetable();
son.knockTheBell();
son.playPinao();
son.playViolin();
Daddy daddy = son;
daddy.gamble();
//讓兒子扮演和尚的角色
Monk monk = son;
monk.chant();
monk.eatVegetable();
monk.knockTheBell();
Musician musician = son;
musician.playPinao();
musician.playViolin();
父親類
package com.baidu;
public class Daddy {
protected String name;
public Daddy(String name){
this.name = name;
}
public void gamble(){
System.out.println(name + "正在賭博.");
}
}
和尚接口
package com.baidu;
//接口之間可以繼承的而且允許多重繼承(一個接口繼承多個接口)
public interface Monk {
public default void chant(){
}
public default void eatVegetable(){
}
public default void knockTheBell(){
}
public default void practiceKongfu(){
}
}
音樂家接口
package com.baidu;
public interface Musician {
void playPinao();
void playViolin();
}