0

以下のコードについて混乱しています。このコードは他の誰かによって書かれており、私は現在、Java でパラメーターの受け渡しがどのように機能するかをより理解するためにコードを研究しています。

コード#1

addKeyListener((KeyListener)new TAdapter());

およびコード#2

addKeyListener(new TAdapter());

TAdapter が KeyAdapter クラスを拡張したクラスであると仮定して、同じことを意味し、同じことを実行しますか? また、Eclipse で読んだメソッドの説明から、メソッドが KeyListener オブジェクトを受け取る場合でも、必ずしも TAdapter オブジェクトを KeyListener として明示的にキャストする必要がないことに気付きました。なぜこれが可能なのですか?Java docs から KeyAdapter クラスを簡単に検索したところ、KeyAdapter クラスは KeyListener インターフェイスを実装しているようです。では、パラメータの受け渡しで Java が機能する方法の 1 つは、メソッドの説明にリストされている同じ名前のインターフェースを実装する特定のクラスから継承するクラスのインスタンスをメソッドが受け入れることができるということであると想定しても安全でしょうか? もしそうなら、なぜこれも可能ですか?

PS 余談ですが、プログラマーがクラス TAdapter に名前を付ける理由がわかりません。T は何の略ですか? 他のソース コードでもこのタイプのクラス命名に気付きましたが、この想定される規則を理解していませんでした。

4

3 に答える 3

1

メソッドが引数としてObjectParameterを受け取る場合、ポリモーフィズムのためにSubClassOfObjectParameterも受け取ることができます。

TAdapterの先頭にあるTinは、わかりにくいため、名前の付け方が悪いだけです。

于 2012-12-30T07:40:46.183 に答える
1

では、パラメータの受け渡しで Java が機能する方法の 1 つは、メソッドの説明にリストされている同じ名前のインターフェースを実装する特定のクラスから継承するクラスのインスタンスをメソッドが受け入れることができるということであると想定しても安全でしょうか?

はい

もしそうなら、なぜこれも可能ですか?

これはポリモーフィズムによるものです。あなたはこれを読むべきです。特にポリモーフィズムのサブセクション。

于 2012-12-30T08:09:23.967 に答える
1

そうです、「メソッドは、インターフェイスを実装する特定のクラスから継承するクラスのインスタンスを受け入れることができる」というのは本当です。

より一般的にはimplements、インターフェイスがポリモーフィズムの観点からそのインターフェイスのサブクラスであると言うことができるクラスであり、任意のパラメーターまたは変数に、その宣言されたクラスの任意のサブクラスのインスタンスを割り当てることができます。

そのクラスが という名前TAdapterになっている理由については、残念ながらお答えできません。少なくとも、一般的に使用されている規則ではありません。:)

于 2012-12-30T07:35:52.510 に答える