Kế thừa (Inheritance) trong Kotlin
🎯 Mục tiêu: Hiểu kế thừa trong Kotlin với
open,override, và abstract classes.
💡 Khái niệm
Mặc định class trong Kotlin là final (không thể kế thừa). Dùng open để cho phép.
open class Animal(val name: String) {
open fun makeSound() {
println("Some sound")
}
}
class Dog(name: String) : Animal(name) {
override fun makeSound() {
println("Woof!")
}
}📝 Cú pháp
open class Parent {
open val property = "parent"
open fun method() { println("Parent method") }
}
class Child : Parent() {
override val property = "child"
override fun method() { println("Child method") }
}Gọi superclass
class Child : Parent() {
override fun method() {
super.method() // Gọi Parent.method()
println("Child addition")
}
}🔧 Abstract Class
abstract class Shape {
abstract val area: Double
abstract fun draw()
// Non-abstract method
fun printArea() {
println("Area: $area")
}
}
class Circle(val radius: Double) : Shape() {
override val area: Double
get() = Math.PI * radius * radius
override fun draw() {
println("Drawing circle with radius $radius")
}
}🎯 Constructor và Inheritance
open class Parent(val name: String) {
init { println("Parent init: $name") }
}
class Child(name: String, val age: Int) : Parent(name) {
init { println("Child init: $name, $age") }
}
// Output when creating Child("Alice", 25):
// Parent init: Alice
// Child init: Alice, 25⚠️ Lưu ý
[!WARNING] Không gọi
openmethod trong constructor:open class Parent { init { doSomething() } // ❌ Nguy hiểm! open fun doSomething() { } } class Child : Parent() { val value = "child" override fun doSomething() { println(value) // null! (chưa được init) } }
✅ Checklist
- Dùng
openđể cho phép kế thừa - Dùng
overrideđể ghi đè - Hiểu abstract class vs open class
- Gọi
superkhi cần
Tiếp theo: Interface
Last updated on