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
| Modifier | Class member | Top-level |
|---|---|---|
public (default) | Visible everywhere | Visible everywhere |
private | Visible in class | Visible in file |
protected | Visible in class + subclasses | N/A |
internal | Visible in module | Visible 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): BooleanLờ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
valvàvarcho properties - Sử dụng init block
- Tạo secondary constructor
- Hiểu visibility modifiers
Tiếp theo: Data Class
Last updated on