21845


Javaを勉強していますが、thisには2つの使用方法があることがわかります。個人での理解は以下です：  
１．同じクラスの別のコンストラクタを呼び出す。  
２．メンバー変数名とローカル変数名が競合するときに、メンバー変数を参照するためにはthis キーワードを使います。

で、Appletを勉強する際に以下のコードが出ました：

[code]

    public class EventTest extends Applet implements MouseListener{
      public void init(){
        addMouseListener(this);
      }
    }
    
[/code]

そのthisをaddMouseListenerの引数に代入する意味はなんでしょうか？  
なぜthisを代入するのでしょうか？  
私はそのページを参照しました：<http://www.javadrive.jp/applet/event/index1.html>

ご指摘をお願い致します。


CC BY-SA 3.0
2016-02-08T07:08:14.917
21839
2016-02-08T07:53:03.020
14322
question
java eclipse
引数にthisについて


> そのthisをaddMouseListenerの引数に代入する意味はなんでしょうか？

プログラムの関数の仕様について調べるべきです。

> addMouseListener(this);

関数について知っている前提で説明します。  
thisは生成したEventTestです。  
addMouseListenerを使用する際にMouseListenerを設定する必要があります。  
MouseListenerを型情報として持つ変数を設定する必要があります。  
EventTestはインターフェイスとしてMouseListenerが設定されています。

> **検索すべき事項**  
>  Java 関数  
>  Java インターフェイス

余計なお世話かもしれませんが、Javaの基礎から勉強したほうがよいかと思います。  
基礎部分を把握していれば、今回のような疑問は出ないと思います。


CC BY-SA 3.0
2016-02-08T07:18:19.410
21841
2016-02-08T07:18:19.410
14215
21839
answer


addMouseListenerは、マウスイベント（マウスのボタンが押された、離された、マウスが領域に入った、出た）を受け取るオブジェクトを指定するメソッドです。  
addMouseListenerの引数は、MouseListenerを実装したクラスのオブジェクトでなければなりません。

質問のコードを見ると  
class EventTestは、MouseListenerを実装したクラスになっています。  
thisは、EventTestのオブジェクトですから、addMouseListenerの引数として使えます。

このように、クラスのオブジェクトを他のクラスの引数として使い場合にも、thisが使われます。


CC BY-SA 3.0
2016-02-08T07:33:52.510
21843
2016-02-08T07:33:52.510
217
21839
answer


クラスを利用するには、通常はそのクラスのインスタンスを作成します。  
参照サイトの

> EventShori shori = new EventShori();

がそれです。

addMouseListenerメソッドは引数にMouseListenerインターフェースを受け取ります。  
上記のEventShoriクラスはMouseListenerインターフェースを実装しているので

> addMouseListener(shori);

とすることができます。  
これが「別クラスを用意したい場合」の例です。

そして

> addMouseListener(this);

は、別クラスでなく自分自身(つまりEventTest)のインスタンスを渡しています。  
thisは自分自身のインスタンスを表すキーワードになります。


CC BY-SA 3.0
2016-02-08T07:53:03.020
21845
2016-02-08T07:53:03.020
13314
21839
answer