Skip to Content
Kotlin📘 Ngôn ngữ Kotlin🏗️ Class và Object

Class và Object trong Kotlin

🎯 Mục tiêu: Hiểu cách định nghĩa class, tạo object, và các tính năng đặc biệt của Kotlin như primary constructor.


💡 Khái niệm

Class là blueprint để tạo objects. Object là instance của class.

class Person(val name: String, var age: Int) fun main() { val person = Person("Alice", 25) // Tạo object println(person.name) // Alice person.age = 26 // Thay đổi property }

📝 Primary Constructor

Kotlin có syntax ngắn gọn cho constructor:

// Primary constructor với val/var tự động tạo properties class User(val name: String, var email: String) // Tương đương với Java: // class User { // private final String name; // private String email; // public User(String name, String email) { ... } // public String getName() { ... } // public String getEmail() { ... } // public void setEmail(String email) { ... } // }

init block

class User(val name: String) { init { println("User created: $name") require(name.isNotBlank()) { "Name cannot be blank" } } }

Nhiều init blocks

class User(val name: String) { val firstLetter: Char init { println("First init block") } init { firstLetter = name.first() println("Second init block: $firstLetter") } }

🔧 Secondary Constructor

class User(val name: String, val email: String) { // Secondary constructor phải gọi primary constructor constructor(name: String) : this(name, "$name@example.com") constructor() : this("Guest") } fun main() { val u1 = User("Alice", "[email protected]") val u2 = User("Bob") // email = [email protected] val u3 = User() // name = Guest }

📦 Properties

class Rectangle(val width: Int, val height: Int) { // Computed property val area: Int get() = width * height // Property với backing field var label: String = "" set(value) { field = value.trim().uppercase() } // Late-initialized property lateinit var description: String }

🔒 Visibility Modifiers

ModifierClass memberTop-level
public (default)Visible everywhereVisible everywhere
privateVisible in classVisible in file
protectedVisible in class + subclassesN/A
internalVisible in moduleVisible in module
class User { public val name = "Alice" // Default private val password = "123" // Chỉ trong class protected val secret = "xyz" // Class + subclasses internal val code = "ABC" // Trong module }

🛠️ Thực hành

// TODO: Tạo class BankAccount với: // - accountNumber (readonly) // - balance (private set) // - deposit(amount) // - withdraw(amount): Boolean

Lời giải:

class BankAccount(val accountNumber: String) { var balance: Double = 0.0 private set fun deposit(amount: Double) { require(amount > 0) { "Amount must be positive" } balance += amount } fun withdraw(amount: Double): Boolean { return if (amount <= balance) { balance -= amount true } else { false } } } fun main() { val account = BankAccount("123456") account.deposit(1000.0) println(account.balance) // 1000.0 account.withdraw(300.0) println(account.balance) // 700.0 }

✅ Checklist

  • Tạo class với primary constructor
  • Sử dụng valvar cho properties
  • Sử dụng init block
  • Tạo secondary constructor
  • Hiểu visibility modifiers

Tiếp theo: Data Class

Last updated on