0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Kotlin】Kotlin の open と final を 理解する

Last updated at Posted at 2025-10-03

はじめに

Kotlin ではクラスやメンバーを宣言するとき、Java と異なるデフォルト挙動を持っています。
デフォルトは final(継承禁止) であり、継承やオーバーライドを許可する場合に open を明示する必要があります。


1. final とは?

final は「それ以上の拡張を禁止する」という意味です。

  • クラスに付けると → 継承できなくなる
  • メソッドやプロパティに付けると → オーバーライドできなくなる

Kotlin のクラスは デフォルトで final なので、明示的に書かなくても継承不可です。

class Animal {
    fun speak() {
        println("動物が鳴く")
    }
}

// class Dog : Animal() { } // エラー: Animal は継承できない

2. open とは?

open は「拡張を許可する」という意味です。
クラスやメンバーを継承・オーバーライド可能にするには open を付けます。

open class Animal {
    open fun speak() {
        println("動物が鳴く")
    }
}

class Dog : Animal() {
    override fun speak() {
        println("ワンワン!")
    }
}

val dog = Dog()
dog.speak() // ワンワン!

Java ではクラスはデフォルトで open ですが、Kotlin は逆に デフォルトで final
これは 安全性と明示性を重視した設計です。


3. finalopen の組み合わせ

クラスは final がデフォルト

class A // final
open class B // open

メンバーは final がデフォルト

open class Base {
    fun foo() {}             // final → オーバーライド不可
    open fun bar() {}        // open → オーバーライド可能
}

override はデフォルトで open

open class Parent {
    open fun speak() {}
}

class Child : Parent() {
    override fun speak() {}  // デフォルトで open(さらに override 可能)
}

class GrandChild : Child() {
    override fun speak() {}  // オーバーライド可能
}

ただし、明示的に final を付ければ「これ以上のオーバーライド禁止」になります。

class Child : Parent() {
    final override fun speak() {} // 以降はオーバーライド不可
}

4. abstractopen

  • abstract必ずサブクラスでオーバーライドしなければならない
  • abstract メンバーは暗黙的に open
  • open は「オーバーライドできる」だけで、必須ではない
abstract class Shape {
    abstract fun draw() // 実装必須
}

class Circle : Shape() {
    override fun draw() = println("円を描く")
}

まとめ

  • Kotlin のクラスとメンバーはデフォルトで final
  • 継承やオーバーライドを許可するには open を明示する必要がある
  • override は暗黙的に open → さらに final を付ければ制御可能
  • abstract は暗黙的に open であり、実装を強制する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?