Kotlinには内部クラスとネストクラスという2つの異なるクラスの定義方法があります。これらの違いを理解することは、Kotlinプログラミングで重要です。内部クラスとネストクラスの主な違いについて説明し、具体的なコード例を提供します。
内部クラス (Inner Class)
内部クラスは、外部クラスのインスタンスに依存しています。つまり、内部クラスのインスタンスを作成するには、外部クラスのインスタンスが必要です。内部クラスはinner
キーワードで定義されます。
class OuterClass {
private val outerProperty: Int = 10
inner class InnerClass {
fun printOuterProperty() {
println("Outer property: $outerProperty")
}
}
}
fun main() {
val outer = OuterClass()
val inner = outer.InnerClass()
inner.printOuterProperty()
}
この例では、InnerClass
は外部クラスOuterClass
のインスタンスにアクセスできるため、printOuterProperty
メソッドでouterProperty
にアクセスできます。
ネストクラス (Nested Class)
ネストクラスは、外部クラスのインスタンスに依存しません。ネストクラスは通常のクラスと同様に定義されます。
class OuterClass {
private val outerProperty: Int = 10
class NestedClass {
fun printOuterProperty() {
// 外部クラスのプロパティにアクセスできない
println("Cannot access outer property")
}
}
}
fun main() {
val nested = OuterClass.NestedClass()
nested.printOuterProperty()
}
この例では、NestedClass
は外部クラスのインスタンスにアクセスできず、outerProperty
にはアクセスできません。
要するに、内部クラスは外部クラスのインスタンスにアクセスでき、ネストクラスはできません。選択肢はプログラムの要件に応じて選ぶ必要があります。