Kotlin-インタフェース
Java 8では、Kotlinのインタフェースはとても簡単です.抽象的な方法だけでなく、実現する方法もあります.抽象クラスとの違いは、インタフェースがステータスを保存できないことです.プロパティはありますが、抽象的またはアクセサ実装として定義します.インタフェースを定義し、インターネットキーを使用できます.
実装インタフェース
インタフェースのプロパティ
インタフェースではプロパティを宣言できます.インタフェースのプロパティは抽象的または特定のアクセサとして宣言する必要があります.インタフェースのプロパティには暗黙的なフィールドは使用できません.また、アクセサの前でも参照できません.
上書き競合の解決
親クラスで多くのタイプまたはメソッドを宣言すると、サブクラスで複数のインタフェースが実装されると、重複する競合が発生します.
以上の例では、インタフェースAおよびインタフェースBは、foo()およびbar()を宣言する、Aのbar()は抽象的であるが、Bには具体的な実装がある、Aインタフェースを単独で実装する場合、barメソッドを実装しなければならないが、AインタフェースおよびBインタフェースを同時に実装場合、競合する問題が発生するため、Dクラスでは多くの実装を処理する.
interface MyInter{
fun bar();
fun food(){
//
}
}
実装インタフェース
class My :MyInter{
override fun bar(){
//
}
}
インタフェースのプロパティ
インタフェースではプロパティを宣言できます.インタフェースのプロパティは抽象的または特定のアクセサとして宣言する必要があります.インタフェースのプロパティには暗黙的なフィールドは使用できません.また、アクセサの前でも参照できません.
interface MKInter{
val prop:Int //
val propertyImpl:String
get()="MK"
fun food(){
println(prop);
}
}
上書き競合の解決
親クラスで多くのタイプまたはメソッドを宣言すると、サブクラスで複数のインタフェースが実装されると、重複する競合が発生します.
interface A {
fun foo() { print("A") }
fun bar()
}
interface B {
fun foo() { print("B") }
fun bar() { print("bar") }
}
class C : A {
override fun bar() { print("bar") }
}
class D : A, B {
override fun foo() {
super.foo()
super.foo()
}
override fun bar() {
super.bar()
}
}
以上の例では、インタフェースAおよびインタフェースBは、foo()およびbar()を宣言する、Aのbar()は抽象的であるが、Bには具体的な実装がある、Aインタフェースを単独で実装する場合、barメソッドを実装しなければならないが、AインタフェースおよびBインタフェースを同時に実装場合、競合する問題が発生するため、Dクラスでは多くの実装を処理する.