[做業1]ide
------------------------------------函數
使用抽象類和接口實現適配器模式設計。涉及的類和接口分別爲ButtonListener(接口),this
其中含有click() / dbclick() / keyUp() / keyDown()等方法。spa
ButtonAdapter(按鈕適配器類),適配器中對非click()方法進行默認實現。設計
Button類中添加addListener(ButtonListener l)方法。orm
[做業2]對象
------------------------------------繼承
闡述什麼是多態。接口
爲何函數能夠覆蓋,而屬性不能覆蓋?事件
【--------------------------------做業1-------------------------------------------】
//按鈕監聽器接口
interface ButtonListener {
public void onClick(); // 單擊事件
public void onDbclick(); // 雙擊事件
public void onKeyDown(); // 按鍵按下
public void onKeyUp(); // 按鍵釋放
}
// 按鈕監聽器適配器
abstract class ButtonAdapter implements ButtonListener {
public void onDbclick() {//抽象類,適配器空實現,還有一個onClick()沒有實現
}
public void onKeyUp() {
}
public void onKeyDown() {
}
}
class MyListener extends ButtonAdapter {
public void onClick() {
System.out.println("i click one !");
}
}
class YourListener extends ButtonAdapter {
public void onClick() {
System.out.println("you click one !");
}
}
// 按鈕
class Button {
// 按鈕的監聽器
private ButtonListener listener;//按鈕的處理程序就是這個listener,把上面的接口定義爲了按鈕的成員(按鈕是有這些屬性的)
// 添加監聽器
public void addListener(ButtonListener lsn) {
this.listener = lsn;
}
// 模擬單擊事件
public void click() {
// 處理單擊事件
listener.onClick();//找到單擊事件的處理方法,調用監聽器的onClick方法,on指的是什麼事件發生時
}
// 模擬雙擊事件
public void dbClick() {
listener.onDbclick();
}
}
class AdapterDemo {
public static void main(String[] args) {
// button1
Button btn1 = new Button();
MyListener l = new MyListener();
btn1.addListener(l);
btn1.click();
// button2
Button btn2 = new Button();
YourListener yl = new YourListener();
//btn2.addListener(yl);
//btn2.click();
//還能夠這樣寫
btn2.addListener(new ButtonAdapter(){//關鍵,匿名內部類對象
public void onClick() {
System.out.println("you click one !除了上面常規的,還能夠用匿名內部類對象");
}
});
btn2.click();
}
}
【--------------------------------做業2-------------------------------------------】
闡述什麼是多態。
爲何函數能夠覆蓋,而屬性不能覆蓋?
答:
定義:某一類事物的多種存在形態。
對繼承的類來說,使用父類類型引用子類的對象。
對於接口來講,能夠使用接口引用實現了該接口的類所建立的對象。
屬性是資產,容納數據的地方,函數是行爲,不容納和存儲數據,因此函數能夠被覆蓋,而屬性不能。