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. UCLのPython実装、またはUCLへのインタフェースは存在しますか?
- 7. オープン・エンドのインターバル実装はJava用に存在しますか?
- 8. インタフェースXを実装するオブジェクトを、インタフェースXから継承するインタフェースYに渡すときのエラー。C#
- 9. JAVAを使用してインターフェイスメンバーを明示的に実装する方法は?
- 10. インタフェースは部分的にメソッドを実装できますか?
- 11. C#コンパイラは、型が実装するすべてのインタフェースを明示的に宣言するのはなぜですか?
- 12. 返すインタフェース明示的な変換
- 13. C#での公開インタフェースの実装に関する問題
- 14. インデクサー - 明示的なインターフェイスメンバの実装
- 15. 暗黙的対明示的なインタフェース
- 16. Javaのインタフェース/抽象クラスの動的実装
- 17. C#インターフェイスの暗黙実装と明示実装の違い
- 18. インタフェースを実装した素数シーケンス(Java)
- 19. 明示的にauth0を実装する適切な方法
- 20. 明示的に反応を実装する
- 21. の実装インタフェース
- 22. モデルのインタフェースをLaravelで実装する
- 23. Cでインタフェースの実装を制限する方法
- 24. Roslyn - インタフェースのシンボル実装ですか?
- 25. C++のサーキュラーリストの標準実装は存在しますか?
- 26. OOP-デザイン:インタフェース・メソッドの実装に依存するパラメータ
- 27. C#共分散の実装共通インタフェース
- 28. 明示的な実装をオーバーライドできるのはなぜですか?
- 29. 動的型定義の特定の形式を明示的に実装する
- 30. クラスが実装するインタフェースのタイプを返すC#
あなたはまた、民間の継承のみ「良いデザインを気にすることはできません人」のためであると信じていますか?これは、Javaから欠けているもう1つの有用なOOP機能です。 –
デリゲートが決してJavaになれないという同じ理由から、Javaには決してなりません。なぜデリゲートがJavaで行なわれたことがないのか、そしてこれは似ている理由についての良い記事があります。それは、それがあなたがそれでやることができる良いものではないことができるので、悪いことです。何かMicrosoftとそれが生態系は得られない。 – eaglestorm
@ealgestorm、スイングでさえ、オブジェクトを「濫用して」オブジェクトをデリゲートのように振る舞わせることを理解していますよね?また、ほとんどすべての質問が.NETに関連していると面白いと思います。 –