2016-11-23 20 views
0

は、だから私は、このインターフェイス持って言うことができます:インタフェースと抽象クラスのコンストラクタ?

public interface IBox 
{ 
    public void onEvent(int eventType, View control, Object data); 
} 

をそして、私はクラスのアクセスを持っていること:

public class Rectangle 
    { 
    private IBox onEvent; 


public Rectangle(Context context, View rowRoot) { 
     super(context); 
     onEvent = (Rectangle) context; 
    } 
     @Override 

    public void onClick(View v) { 

     switch (v.getId()) { 
     case R.id.buttonClick: 
       // send data : data1 and data2; 
       onEvent.onEvent(data1,null, data2); 
      break; 
    } 

と私はクラスがIBoxを実装します:

public abstract class BaseActivity implements IBox 
    { 
    @Override 
     public void onEvent(int data1, View data, Object data2) 
     { 
     //do something here 
     } 
    } 

と私が持っていますクラスBaseActivityクラス:

public class HomeBaseActivity extends BaseActivity 
{ 
    // transit Activity here, or send intent.... 
} 

は、最終的な私は、クラスのメインはHomeBaseActivity拡張しています

public class HomeActivity extends HomeBaseActivity 
    { 

      @Override 
      public void onEvent(int data1, View data, Object data2) 
      { 
      switch (data1) { 
      //reciver data1 from class Rectangle 
      } 
    } 

私の質問:

1、なぜDATA1クラスHomeActivityにreciverことができますか?

2、どのような体は、私を助けることができる?

//英語持つごみ、私はあなたがRectangleonClick()から、我々はHomeActivityonEvent()に値を渡すことができますなぜ不思議と自分の活動がContext(すべてのを拡張していることをassumptingされていることを理解していますおかげ

+0

あなたが投稿したコードは、 'Rectangle'クラスの変数' onEvent'が決して初期化されないので動作しません。実際のコードでは、 'HomeActivity'クラスのオブジェクトを' Rectangle'クラスの変数 'onEvent'に割り当てています。 –

+0

申し訳ありませんが、あなたの質問は不明です。 *なぜdata1が受信可能なのか... ...それはどういう意味ですか? – GhostCat

+0

@ Timothy Truckle:申し訳ありませんが、私はコンストラクタで初期化しましたが、私は投稿していませんので、私は投稿しません。 –

答えて

0

ので、アクティビティはContextまで延長する必要があります)。

ここで見てみましょう。 HomeActivityは、を実装しているHomeBaseActivityまで拡張されています。基本的にnew HomeActivity()のオブジェクトはIBoxにキャストできます。 [1]

上記の私の前提として、あなたの活動はContextに拡張されています。 [2]

[1] [2] =>HomeActivityのインスタンスはIBoxContextにキャストすることができます。

はのは、あなたのRectangleHomeActivityのオブジェクトを渡してみましょう(Contextにキャストされている)とonEvent財産(今IBoxにキャストされている)に割り当てます。

onClick()では、onEvent.onEvent(data1,null, data2);HomeActivityに実装したonEvent()メソッドを単に呼び出すだけです。そのため、data1HomeActivityに渡すことができます。

Javaのインターフェイスと継承の詳細については、hereを参照してください。

P/s:英語を読んでいるときに苦労したら、私はこの時間の間あなたの母国語で私的に説明することができます。少なくとも皆さんがあなたを理解できるように、あなたの英語力を向上させてください。ここでは英語で話し合うからです。

関連する問題