[備忘] kotlinのインターフェイスと抽象クラス

インプットの記録

interface

  • クラスに実装を強制する「ルール」的なものおおおおおおお

  • 複数のクラスに共通の動作を提供

  • typescriptの型定義とほぼ同じ感覚

interface Animal {
    fun makeSound() // インターフェイスでは関数の本体を書かない(実装はしない)
}
class Dog : Animal {
    override fun makeSound() {
        println("ワンワン!")
    }
}
class Cat : Animal {
    override fun makeSound() {
        println("ニャーニャー!")
    }
}
fun main() {
    val dog = Dog()
    val cat = Cat()
    dog.makeSound() // ワンワン!
    cat.makeSound() // ニャーニャー!
}

抽象クラス(abstract class)

  • クラスの雛形を作る

  • 具象メソッド、抽象メソッドの両方を持てる

abstract class Animal(val name: String) {
    abstract fun makeSound() 
    fun sleep() { 
        println("$name は眠っています。")
    }
}
class Dog(name: String) : Animal(name) {
    override fun makeSound() {
        println("ワンワン!")
    }
}
fun main() {
    val dog = Dog("ポチ")
    dog.makeSound() // ワンワン!
    dog.sleep() // ポチ は眠っています。
}

それぞれ違い

インターフェイスはクラスの共通動作、つまり「何を」までは定義し、具体的な実装はしない。
抽象クラスは共通動作の実装、つまりプロパティ定義や関数の中身も書ける。

また、抽象クラスはコンストラクタを持たすことができるが、インンターフェイスは持たせられないので、そこも違い。
クラスごとに違う情報を持たせたかったり、インスタンス化時に値を渡したい時は抽象クラスやデータクラス、そうでないときはインターフェイスという見方もある。

超要約すると、ルールを決めるだけ、多重継承もしたい、とかなら、インターフェイス、共有のプロパティやメソッドを提供したい、クラスにはそれぞれ違う情報を持たせたいなら抽象クラスといった理解。

文字数が100文字以上、かつまだAIからのフィードバックがない場合のみAIにフィードバックをもらえます

励まし

インターフェイスと抽象クラスについて、詳細な説明をありがとうございます!知識の整理や比較は、深い理解に繋がります。

具体的なフィードバック

情報の整理が素晴らしいですね。クラスや型に関する概念を明確に理解されているようで印象的です。

実行可能なアドバイス

今後もこのような具体的な例を交えた説明や比較を続けることで、より多くの方が理解しやすくなるかもしれません。引き続き、情報をシンプルかつ具体的に示すことで、読者にアプローチしやすくすると良いでしょう。


yusei53の画像
yusei53

yusei53 has shared 198 reflections. Discover new insights this platform.


[備忘] kotlinのインターフェイスと抽象クラス | リフティ