物件表達式和物件宣告
以下是 Kotlin 中 物件表達式(Object Expression) 和 物件宣告(Object Declaration) 的教學,包括它們的特性、語法、範例。
1. 物件表達式(Object Expression)
特性
- 用於創建匿名類別的實例:
- 匿名類別是無名稱的類別,通常用來創建一次性使用的物件。
- 在需要即時定義類別並創建實例時使用。
- 類似於 Java 中的匿名內部類別,但更簡潔。
語法
val obj = object : 父類別或介面 {
// 覆寫方法或新增屬性
}
範例:創建匿名類別
interface ClickListener {
fun onClick()
}
fun main() {
val clickListener = object : ClickListener {
override fun onClick() {
println("Button clicked!")
}
}
clickListener.onClick() // 輸出:Button clicked!
}
範例:擴展類別並添加方法
open class Animal {
open fun sound() {
println("Animal makes a sound.")
}
}
fun main() {
val dog = object : Animal() {
override fun sound() {
println("Dog barks.")
}
}
dog.sound() // 輸出:Dog barks.
}
2. 物件宣告(Object Declaration)
特性
- Kotlin 提供的單例模式(Singleton Pattern)實現,用於創建單例物件:
- 使用
object
關鍵字宣告,無需顯式創建實例。 - 可以包含屬性、方法,甚至初始化區塊。
範例:單例物件
object Logger {
fun log(message: String) {
println("Log: $message")
}
}
fun main() {
Logger.log("This is a log message.") // 輸出:Log: This is a log message.
}
範例:包含屬性與初始化邏輯
object Config {
val appName: String
val version: String
init {
appName = "MyApplication"
version = "1.0.0"
}
}
fun main() {
println("App: ${Config.appName}, Version: ${Config.version}")
// 輸出:App: MyApplication, Version: 1.0.0
}
3. 伴生物件(Companion Object)
特性
- 每個類別只能有一個伴生物件。
- 用於定義與類別相關的靜態成員。
範例:伴生物件
class Utility {
companion object {
fun sayHello() {
println("Hello from Companion Object!")
}
}
}
fun main() {
Utility.sayHello() // 輸出:Hello from Companion Object!
}