1

インターフェイスに関するOracleドキュメントには、非常に紛らわしい文があります

Relatableさまざまなクラスで実装することを強調すると、それらのクラスのいずれかからインスタンス化されたオブジェクトをメソッドと比較できますfindLargerThan()(両方のオブジェクトが同じクラスである場合)。

これを理解したかどうかはわかりません。

クラスがあり、インターフェイスAB実装していて、次のようRelatableなコードがあるmain()とします。

A a = new A();
B b = new B();

System.out.println(a.isLargerThan(b));

印刷が機能するように、isLargerThan()メソッドがインターフェースに従ってを返すと仮定します。int

  • 上記のコードは、どのクラス A および B でも機能しますか? 各クラスの実装が異なり、おそらくisLargerThan()それぞれのクラスの実装でクラスの型にキャストされているため、これは不可能だと思います。

  • 上記の推論が正しい場合、オラクルのドキュメントで強調されている理由は何ですか? それが私の混乱の元です。

それが機能するかどうかを確認するために実装する必要があることはわかっていますが、私はJavaの初心者であるため、実装自体が機能しない可能性があります。だからこそ、ここで質問しました。

4

4 に答える 4

1

インターフェイス メソッドのシグネチャが次のようになるとします。

int isLargerThan(Relatable r);

問題は発生しません。

すべては実装に依存します。

A と B の実装が interfaceRelatableで動作し、特定の実装にキャストせず、各実装の特定のプロパティを使用しない場合、すべて問題ありません。

于 2013-10-20T10:14:12.913 に答える
1

a.isLargerThan(b)クラスAで機能するかどうかBは、 内の実装に完全に依存しておりA、パラメータを にキャストしようとする場合としない場合がありますA

ドキュメント内のanyが強調されているのは、findLargestを実装するクラスの任意のインスタンスにメソッドを適用できることを示すために使用されますRelatableisLargerThanただし、実装クラスでの の実装は常にパラメーターを実装クラスにキャストすることも前提としています。

この仮定の下では、 を と別の 、またはを別findLargestの と比較するためにを使用できますが、 と を と比較することはできません。AABBAB

于 2013-10-20T10:22:04.313 に答える
0

パラメータはインターフェイスにすることができます。次に、そのインターフェイスを実装する任意のクラスを使用できます。

一見の価値がある比較対象および比較対象。

于 2013-10-20T10:12:26.643 に答える