Skip to Content
Kotlin📘 Ngôn ngữ Kotlin🧬 Kế thừa (Inheritance)

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 open method 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 super khi cần

Tiếp theo: Interface

Last updated on