私はthisの記事を読んでいました。あなたはKotlinインターフェースでコードを書くことができると言います。 Javaはこのanswerのようにダイヤモンドの問題を回避するためのインタフェースでコードを書くことを許可していませんでした。 Kotlinがインターフェイス内のコードを許可し、複数のインターフェイスをクラス内で実装できる場合、これは "Diamond Problem"をもう一度作成しませんか?「インターフェイスのコード」Kotlin、「死の致命的なダイヤモンド」はどうやって回避されますか?
3
A
答えて
2
シナリオ1
2つのインタフェースは、同じシグネチャを持つメソッドを持っており、両方が、それは同じシグネチャを持つメソッド単一のメソッドを実装する必要があるインタフェースで実装していません。
例
interface InterfaceA {
fun sum(a: Int, b: Int)
}
interface InterfaceB {
fun sum(x: Int, y: Int)
}
class TestClass : InterfaceA, InterfaceB {
override fun sum(x: Int, y: Int) {
return a+b
}
}
2つの
2つのインタフェースは、同じシグネチャと異なる戻り型を有するメソッドを持っているシナリオは、この中
例
interface InterfaceA {
fun sum(a: Int, b: Int):Int = a+b
}
interface InterfaceB {
fun sum(x: Int, y: Int)
}
class TestClass : InterfaceA, InterfaceB {
override fun sum(x: Int, y: Int) {
return a+b
}
}
この場合にエラーとなり両方のメソッドが同じrを持たなければならないのでeturn型
ダイアモンドの問題は、KotlinとJavaでは許可されていないクラスの多重継承に関連していますが、2つのインターフェイスを持つインターフェイスを実装してダイアモンドシェイプを作成できます。それ以外の場合はコンパイル時エラーであり、これはダイヤモンド形状の問題を回避します。
例
interface InterfaceA {
fun sum(a: Int, b: Int): Int {
print("InterFaceA");
return a + b
}
}
interface InterfaceB:InterfaceA {
override fun sum(a: Int, b: Int): Int {
print("InterFaceB");
return a + b
}
}
interface InterfaceC:InterfaceA {
override fun sum(a: Int, b: Int): Int {
print("InterFaceC");
return a + b
}
}
interface InterfaceD : InterfaceB, InterfaceC {
override fun sum(a: Int, b: Int): Int {
print("InterFaceD");
return a + b
}
}
オーバーライドは、そうでない場合、コンパイラはエラーを表示し、さらに進行しないことが必要です。
関連する問題
- 1. 致命的なタスクエラーを回避する必要性を避けるには?
- 2. インストールされていないrabbitmqの致命的なエラーを回避するには
- 3. PHP致命的なエラー:インターフェイス 'JsonSerializable'
- 4. 致命的なエラー:ui_about.h:そのようなファイルやディレクトリは
- 5. 致命的なエラー:arm_acle.h:そのようなファイルやディレクトリは
- 6. 致命的なエラー:/ curl.hカール:そのようなファイルやディレクトリは
- 7. PHPとCodeigniterでのエラー処理。どうやってするの?再帰的コードの回避
- 8. は、与えられたkotlinコードでkotlin空のデータクラスのプライマリコンストラクタの回避策
- 9. この繰り返しコードはどうやって避けるのですか?
- 10. GCC致命的なエラー:quit.hそのようなファイルやディレクトリ
- 11. 致命的なエラー:systemc.h:そのようなファイルやディレクトリ
- 12. オブジェクトプールからの借用時の静的な寿命の回避
- 13. 致命的なエラー:libudev.h:そのようなファイルやディレクトリはありません
- 14. システムワークベンチ:致命的なエラー...そのようなファイルやディレクトリはありません
- 15. 致命的なエラー:jpeglib.h:そのようなファイルやディレクトリはありません
- 16. コールバック後にOkHttpディスパッチャーで致命的な例外を回避する方法
- 17. これは "致命的"なので、致命的なエラーが発生するのはなぜですか?
- 18. 致命的なエラーインデックスが範囲外になっています
- 19. MSDTCが無効な場合、TransactionScope内の複数のデータベース接続をどうやって回避しますか?
- 20. テーブル列の命名規則どうやってやるの?
- 21. PHPの致命的なエラー:インターフェイス 'JsonSerializable'が見つかりません
- 22. 致命的なエラー:vtkSTLWriter.h:そのようなファイルやディレクトリがありません
- 23. 致命的なエラー:gstdint.h:そのようなファイルやディレクトリがありません
- 24. JetBrains Gogland:Java Runtime Environmentで致命的なエラーが検出されました:Java Runtime Environmentによって致命的なエラーが検出されました:
- 25. リスト内包で3万回の致命的な機能を実行することを避けるにはどうすればよいですか?
- 26. "致命的なエラー:$ thisオブジェクトコンテキストではない使用"オブジェクトコンテキストのコード
- 27. 致命的なエラー:コード行が間違っている何CakePHPの
- 28. iPhone/iPadのC++コードで致命的なエラーがログに出力されない
- 29. INotifyPropertyChangedインターフェイスでメモリリークをどのように回避できますか?
- 30. Log4jは致命的なプロジェクトですか?
'Javaはインタフェースでコードを書くことを許可していませんでした。https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html –
ええ、私はそうしませんでした。 Java 8)を使用します。私がリンクしている記事をお読みください – AwaisMajeed
何が起こるか見てみるための例を作成しようとしましたか? – marstran