2015-02-06 51 views
2

我正在閱讀Big Nerd牧場關於平板電腦碎片的一本書。我遇到了自學Java時沒有遇到的代碼。什麼是類的嵌套接口的語義?

public interface Callbacks 
{ 
    void onCrimeSelected(Crime crime); 
} 

@Override 
public void onAttach(Activity activity) 
{ 
    super.onAttach(activity); 
    mCallbacks = (Callbacks) activity; 
} 

@Override 
public void onDetach() 
{ 
    super.onDetach(); 
    mCallbacks = null; 
} 

正如您所看到的,這是一個嵌入類ClassA中的代碼。因此,接口範圍將是ClassA.Callbacks。現在,Activity和ClassA完全無關,但我可以將Activity轉換爲Callbacks?我在這裏錯過了什麼嗎?

的這部分代碼我百思不得其解:

@Override 
public void onAttach(Activity activity) 
{ 
    super.onAttach(activity); 
    mCallbacks = (Callbacks) activity; 
} 

我迷惑的,我們怎麼能不相關的類轉換到另一個類/接口屬於不同的範疇/層次。

有人可以幫我理解嗎? TIA!

+2

你可以,'噸。活動本身需要實現該接口。 接口可以嵌套的一個原因是,如果他們只是打算/期望與該類一起使用。 – Stultuske 2015-02-06 07:51:12

+0

當我繼續閱讀本書時,託管活動實現了該界面。這應該解釋它。但現在對我來說這太奇怪了。我必須承認,在這部分作者的寫作中,我迷失了方向。 – 2015-02-06 07:57:09

回答

2

語義是:該類期望附加到它的任何Activity實現該接口。通過這個接口,它將事件傳達給這些活動。

它是一個嵌套接口的原因是:它只能與這個類一起使用。這並不常見。但它通常可以實施,因爲它是public

+0

謝謝你幫助我理解。你是對的。 – 2015-02-06 07:58:34

1

該類或接口Activity需要實現ClassA.Callbacks。否則,語句mCallbacks = (Callbacks) activity;將拋出ClassCastException

+1

很可能它是Activity的子類(或實現)。 – Stultuske 2015-02-06 07:58:16