1

状況は次のとおりです。

私の理解では、メソッドに引数を提供する場合(この場合、「AbstractButton」クラスの「addActionListener」メソッドになります)、提供されるオブジェクトは必要なタイプのいずれかである必要があります(つまり、「ActionListener」 「addActionListener」の場合)または必要なタイプのクラスを実装するクラス(つまり、「ActionListener」インターフェイスを実装するクラス)の。

また、私の理解によれば、「これ」は、メソッドが現在呼び出されているクラスインスタンス、またはそれ以外の場合はそれを含むクラスを指します。

ここにいくつかの簡単なコードがあります:

public class Window extends JFrame implements ActionListener {
    public Window () {
        ...
        private JRadioButton  btn = new JRadioButton("Option");
        btn.addActionListener(this);
    }

    public actionPerformed ( ActionEvent e ) {
        ...
        ...
    }
}

だからここに私の質問があります: このコードのビットは正常に動作します: "this" キーワードは、メソッドが呼び出されているオブジェクトのインスタンス ( "btn" ) を参照し、ボタンは独自のリスナーとして機能します (これは意図された ) であり、ボタンがクリックされると、期待どおりに actionPerformed メソッドが呼び出されます。ただし、次の理由により、なぜこれが当てはまるのかわかりません。

  1. addActionListener は引数として ActionListener を要求します
  2. 「btn」は JRadioButton 型です
  3. JRadioButton は ActionListener 型ではありません
  4. JRadioButton は ActionListener を実装していません (親クラスも実装していません)。

addActionListener が私には間違ったタイプのように見えるこの引数を受け入れるという事実を誰かが明確にすることができますか?

注 : この例の Window クラスが ActionListener を実装していることは理解していますが、これが btn 変数の型および addActionListener によって要求された型とどのように相互作用するかわかりません。

お時間をいただきありがとうございます、ジェイ

4

1 に答える 1

1

「this」キーワードは、メソッドが呼び出されているオブジェクトのインスタンスを参照します (「btn」)

ここでのインスタンスは、クラスではなくthisクラスのインスタンスを指します。WindowJRadioButton

クラスが をWindow実装ActionListenerしているため、その実装は、2 つのクラス間の相互作用を提供するコンポーネントactionPerformedの具体的な実装として機能できます。JRadioButton

于 2012-11-22T22:03:14.033 に答える