我在Android的上下文中這樣做,但我的問題是理解Java。我對兩者都有些新鮮,所以希望我在這裏使用正確的術語。Java繼承,匿名內部類實例成員,Android回調方法
我有一些子類繼承/擴展我的超類(一個Android活動擴展名)稱爲SuperActivity。我還定義了另一個名爲Network的類(這是一個Android服務)。在我的超類中,我定義了一個匿名的內部類,它實現了一個名爲ServiceConnection的(Android)接口。該接口指定(因此我正在定義)將由Android系統調用的方法。我必須將該匿名實例,ServiceConnection實現的內部類傳遞給一個名爲bindService()的方法,以便稍後可以調用該匿名內部類中的方法。
正如我所提到的,我對定義匿名內部類的超類進行了子類化。匿名內部類中的方法必須在子類實例中設置一個實例變量;我需要設置的實例變量在這裏稱爲mNetwork。
在超:
public class SuperActivity extends Activity {
protected Network mNetwork;
protected ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mNetwork = ((Network.NetworkBinder)service).getService();
}
}
void bindNetwork() {
bindService(new Intent(this, Network.class), mConnection, Context.BIND_AUTO_CREATE);
}
}
所以我創建我的子類,並調用其bindNetwork()方法。顯然,分配給mConnection的匿名內部類不是我的子類的實例成員,因爲在匿名內部類中定義的OnServiceConnected()方法被調用之後,被稱爲mNetwork的子類的實例成員爲null。另外,如果我把持有匿名內部類的mConnection變量並在其上調用getClass()。getName()或toString(),它將顯示自己是我的超類的內部類,而不是子類。
顯然我不理解有關Java繼承的一些東西。我想要有許多子類,每個子類都有自己的mNetwork變量,這些變量由匿名內部類中的方法設置。我不想將匿名內部類的定義切換到每個子類中。必須有一種方法。我究竟做錯了什麼?
這可能是一個愚蠢的問題,但是當你對mNetwork進行賦值時,那麼getService()方法會返回一個對象嗎? – weiji 2010-07-13 08:46:00
是的,它的確如此。問題是,當我一直期待它的時候,任務沒有發生。 – 2010-07-15 09:20:29