介面回撥是多型的另一種體現,介面回撥是指可以把使用某一介面的類建立的物件的參照賦值給該介面宣告的介面變數中,那麼該介面變數就可以呼叫被類實現的介面中的方法,當介面變數呼叫被類實現的介面中的方法時,就是通知相應的物件呼叫介面的方法,這一過程成為物件功能的介面回撥。所謂面向介面程式設計,是指當設計某種重要的類時,不讓該類面向具體的類,而是面向介面,即設計類中的重要資料是介面宣告的變數,而不是具體類宣告的物件。本實驗的目的是掌握介面回撥和麵向介面程式設計思想。
小狗在不同環境條件下可能呈現不同的狀態,小狗通過呼叫 cry()方法體現自己的當前的狀
態。要求用介面封裝小狗的狀態。具體要求如下。
• 編寫一個介面 DogState,該介面有一個名字為 void showState()的方法。
• 編寫 Dog 類,該類中有一個 DogState 介面宣告的變數 state。另外,該類有一個 cry()方法,在該方法中讓介面 state 回撥 showState()方法。即 Dog 物件通過 cry()方法來體現自己目前的狀態。
• 編寫若干個實現 DogState 介面的類,負責刻畫小狗的各種狀態。
• 編寫主類,在主類中用 Dog 建立小狗,並讓小狗呼叫 cry 方法體現自己的狀態。
介面 DogState 規定了狀態的方法名稱,因此,實現該介面的類,必須具體實現介面中的方法 public void showState()。
interface DogState{
void showState();
}
class aState implements DogState{
public void showState() {
System.out.println("餓了 餓了");
}
}
class bState implements DogState{
public void showState() {
System.out.println("困了 困了");
}
}
class cState implements DogState{
public void showState() {
System.out.println("抱抱 抱抱");
}
}
class Dog{
DogState state;
public void cry() {
state.showState();
}
public void setState(DogState d) {
state = d;
}
}
public class E {
public static void main(String []args) {
Dog dog = new Dog();
dog.setState(new aState());
dog.cry();
dog.setState(new bState());
dog.cry();
dog.setState(new cState());
dog.cry();
}
}