Kotlin - クラス - インターフェース
公開日:2019-11-24 更新日:2019-11-24
[Kotlin]
1. 概要
インターフェースについてです。
インターフェースを使うと、異なるクラスを同様に扱うことができます。
その代わり、各クラスはインターフェースのルールに従って実装する必要があります。
インターフェースを使うと、異なるクラスを同様に扱うことができます。
その代わり、各クラスはインターフェースのルールに従って実装する必要があります。
2. 基本
インターフェースにはメソッドのヘッダーだけ定義して、処理はクラス側で実装します。
処理をクラス側で実装しない場合、コンパイルエラーとなります。
処理をクラス側で実装しない場合、コンパイルエラーとなります。
interface ITest {
fun test(msg:String)
}
class Test : ITest {
override fun test(msg:String) {
println("Test.test(): $msg")
}
}
fun main() {
val o:ITest = Test()
o.test("Hello") // Test.test():Hello
}
3. プロパティの強制
インターフェースでプロパティを定義して、クラス側でプロパティの実装を強制させることができます。
内部的には、プロパティは setter と getter に変換され、メソッドとして処理されます。
内部的には、プロパティは setter と getter に変換され、メソッドとして処理されます。
interface ITest {
// val value:Int = 100 // エラー。初期化はできない
val value:Int
}
class Test : ITest {
override val value = 100
}
fun main() {
val o:ITest = Test()
println(o.value) // 100
}
4. メソッドの実装
Kotlin のインターフェースでは、抽象クラスのように、メソッドを実装することができます。
また、クラス側でメソッドをオーバーライドした場合、 super を使ってインターフェース側のメソッドを呼ぶこともできます。
また、クラス側でメソッドをオーバーライドした場合、 super を使ってインターフェース側のメソッドを呼ぶこともできます。
interface ITest {
fun test(msg:String) {
println("ITest.test(): $msg")
}
}
class Test : ITest { }
fun main() {
val o:ITest = Test()
o.test("Hello") // ITest.test(): Hello
}
5. インターフェースの複数指定
インターフェースを複数指定することができます。
また、複数のインターフェースで同じシグネチャのメソッドを定義した場合、クラス側で必ずオーバーライドする必要があります。
また、複数のインターフェースで同じシグネチャのメソッドを定義した場合、クラス側で必ずオーバーライドする必要があります。
interface ITest1 {
fun test() = "ITest1.test()"
}
interface ITest2 {
fun test() = "ITest2.test()"
}
class Test : ITest1, ITest2 {
override fun test():String {
return "Test.test()"
}
}
fun main() {
val o = Test()
println(o.test()) // Test.test()
}