C#では、同じメソッド(たとえばF())を持つ2つの基本インターフェイスがある場合、明示的な実装を使用して異なるimplを実行できます。 F()に対して。これにより、IMyInterface1またはIMyInterface2のように、現在の視点に対応するオブジェクトを別々に扱うことができます。これはJavaで可能ですか?Javaに存在するインタフェースのC#を「明示的実装」ですか?
15
A
答えて
25
いいえ、JavaでのC#の明示的なインタフェース実装のようなものはありません。
Javaでは共変の戻り値の型があります。したがって、インターフェイスで指定されているよりも厳密に型指定された実装を提供する場合は問題ありません。例えば、これは結構です:
interface Foo
{
Object getBar();
}
public class Test implements Foo
{
@Override
public String getBar()
{
return "hi";
}
}
C#がそれを許可しないだろう - と、それを回避する方法の一つは、明示的にインタフェースを実装して、(通常はインターフェースの実装によって呼び出され、より具体的なパブリックメソッドを持つことが一般的です)。
0
メソッドがオーバーロードされている場合にのみこれを行うことができます。 異なることが予想される2つの方法がある場合は、異なる名前のIMHOを使用する必要があります。
-17
いいえ、Javaには存在しないでください。それは良いデザインで悩まされない人々に投げ込むもう一つの骨です。
インタフェースの明示的な実装は、決して必要とされるべきではありません。これが解決しようとする問題を解決する良い方法があります。
3
Javaの匿名インタフェース実装のメカニズムを使用すると、同様の効果を得ることができます。
は、例を参照してください:
interface Foo {
void f();
}
interface Bar {
void f();
}
public class Test {
private String foo = "foo", bar = "bar";
Foo getFoo() {
return new Foo() {
@Override
public void f() {
System.out.println(foo);
}
};
}
Bar getBar() {
return new Bar() {
@Override
public void f() {
System.out.println(bar);
}
};
}
public static void main(String... args) {
Test test = new Test();
test.getFoo().f();
test.getBar().f();
}
}
関連する問題
- 1. 明示的インタフェース実装への暗黙インターフェイス実装のリファクタリング
- 2. JavaでOSインタフェースを実装するのは誰ですか?
- 3. インタフェースCと実装ファイルを目的Cで使用できますか?
- 4. Javaリフレクション:実装汎用インタフェース
- 5. F#で明示的にインターフェイスを実装する
- 6. オープン・エンドのインターバル実装はJava用に存在しますか?
- 7. UCLのPython実装、またはUCLへのインタフェースは存在しますか?
- 8. インタフェースは部分的にメソッドを実装できますか?
- 9. C#コンパイラは、型が実装するすべてのインタフェースを明示的に宣言するのはなぜですか?
- 10. 暗黙的対明示的なインタフェース
- 11. C#での公開インタフェースの実装に関する問題
- 12. Javaのインタフェース/抽象クラスの動的実装
- 13. C#インターフェイスの暗黙実装と明示実装の違い
- 14. インタフェースを実装した素数シーケンス(Java)
- 15. C++のサーキュラーリストの標準実装は存在しますか?
- 16. OOP-デザイン:インタフェース・メソッドの実装に依存するパラメータ
- 17. 動的型定義の特定の形式を明示的に実装する
- 18. C#共分散の実装共通インタフェース
- 19. クラスが実装するインタフェースのタイプを返すC#
- 20. インタフェースを実装するJavaクラスは、アノテーションを自動的に継承できますか?
- 21. 暗黙と明示の両方のインタフェースを実装するのは意味がありますか?
- 22. C#で単語を操作するときに明示的な変換が存在する
- 23. C#は明示的なインターフェイス実装をいつ取得しましたか?
- 24. インタフェース 'IName'に一致するプロパティが存在しないため、 'Property'は 'Property'を実装できません
- 25. 値がインタフェースを実装しているかどうかのチェックの説明。 Golang
- 26. JAXB - サードパーティのライブラリの実装にマップするJavaインタフェースのWebサービスのコンテキストで
- 27. Cでの明示的キャスト
- 28. インタフェースの実装の指定
- 29. Grailsサービスの実装からインタフェースを分離するには?
- 30. インタフェースの実装方法は
あなたはまた、民間の継承のみ「良いデザインを気にすることはできません人」のためであると信じていますか?これは、Javaから欠けているもう1つの有用なOOP機能です。 –
デリゲートが決してJavaになれないという同じ理由から、Javaには決してなりません。なぜデリゲートがJavaで行なわれたことがないのか、そしてこれは似ている理由についての良い記事があります。それは、それがあなたがそれでやることができる良いものではないことができるので、悪いことです。何かMicrosoftとそれが生態系は得られない。 – eaglestorm
@ealgestorm、スイングでさえ、オブジェクトを「濫用して」オブジェクトをデリゲートのように振る舞わせることを理解していますよね?また、ほとんどすべての質問が.NETに関連していると面白いと思います。 –