理解Java中的回調

public interface Adjustable{
/***調節溫度***/
public void adjust(int temperature);
}

public class Base{
/***調節速度***/
private int speed;
public void adjust(int speed){
this.speed=speed;
}
}


在接口Adjustable和Base類中都定義了ajust()方法,這兩個方法的參數簽名一樣,但是有着不同的功能。

如果一個Sub類同時要具有調節溫度和速度的功能,那麼需要繼承Base類和實現Adjustable接口。

public class Sub extends Base implements Adjustable{
private int temperature;
public void adjust(int temperature){
this.temperature = temperature;
}
}

Sub類實現了Adjustable接口中的adjust()方法,並且將Base類中的adjust()方法給覆蓋了。所以沒有達到目的。可以使用內部類來解決這個問題

public class Sub extends Base{
  private int temperature;
  
  private void adjustTemperature(int temperature){
    this.temperature = temperature;
}

  private class Closure implements Adjustable{
     public void adjust(int temperature){
     adjustTemperature(temperature);
}
}

public Adjustable getCallBackReference(){
    return new Closure();
}
}

Sub類採用瞭如下措施:

1.定義一個private 類型的adjustTemperature()方法,該方法實現了調節溫度的功能,爲了避免覆蓋Base類的adjust()方法,故意用了不同的名字。

2.定義了一個private類型的實例內部類Closure,該類實現了Adjustable接口,在這個類的adjust()方法中,調用Sub外部類的adjustTemperature()方法。

3.定義了getCallBackReference()方法,該方法返回Closure類的實例。

Sub = new Sub();
Adjustable ad = sub.getCallBackReference();
ad.adjust(15);

回調實質上是指一個類儘管實際上實現了某種功能,但是沒有直接提供相應的接口,客戶類可以通過這個類的內部類的接口來獲得這種功能。這個內部類本身並沒有提供真正的實現,僅僅調用外部類的實現。可見回調充分發揮了內部類所具有的訪問外部類的實現細節的優勢。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章