0

以下のコードでは、次の行に疑問があります。

btn.addActionListener(this);
th= new Thread(this);

コード:

public class Foo  extends Applet implements  Runnable,ActionListener
{
    Button btn;
    Thread th;
    public void init()
    {
        btn=new Button("Click on me");
        add(btn);
        btn.addActionListener(this);  // pass reference as this
        th=null;
    }
    public void run()
    {
        int i=0;
        while(i++<10)
        {
            try{
                th.sleep(500);
                showStatus(new Integer(i).toString());
            }
            catch(Exception e){}
        }
    }
    public void actionPerformed(ActionEvent e)
    {
        if(th==null)
        {
            th= new Thread(this);  // pass reference as this
            th.start();
        }       
    }
}

in Thread クラス コンストラクターThread(Runnable target)新しい Thread オブジェクトを割り当てます。
Runnable Target を渡すことができますが、これをパラメーターとして渡しました。可能ですが、Runnable インターフェイスを実装しましたが、これをパラメーターとして
渡しました。この場合、 ActionListenerターゲットを渡すことができます。どちらの場合もこれをパラメーターとして 渡すと、どのように解決できるか。この参照は 1.Foo 2.Runnable 3.ActionListener の参照を対象としていると 思い ます が 、 メソッドやコンストラクタに対してどのように適切な参照が選択されるのでしょうか?






4

2 に答える 2

2

IS-A 関係があります。

  • FooIS-AApplet
  • FooIS-ARunnable
  • FooIS-AActionListener

タイプの新しいオブジェクトFooが作成さFooれると、「選択参照」タイプになります。(選択したリストから)異なるタイプが必要な場合は、他の人にキャストする必要があります。

FooIS-AおよびでAppletある限り、メソッドのコントラクトは完全に満たされています。RunnableActionListenerbtn.addActionListener(this);FooActionListenerth= new Thread(this);FooRunnable

于 2012-11-17T07:35:15.803 に答える
2

呼び出しているメソッドのメソッド シグネチャによって、「'this' が対象としているもの」が何を意味するかが決まります。addActionListener() は ActionListener パラメーターを取ります。new Thread() は Runnable を取ります。等

于 2012-11-17T06:45:11.210 に答える