【Kotlin 入門指南】Class 實體化範例

閱讀時間約 4 分鐘
【Kotlin 入門指南】系列文章目錄:https://bit.ly/3t8awwL
Kotlin 線上課程教學影片:https://bit.ly/3qJ5a5Q

Class 實體化

在 Kotlin 程式語言中,類別(Class) 扮演著關鍵角色,它能讓你建立真實存在的物件或實體。類別就像是物件的設計藍圖,描述了它們的特性和行為。而實體化(Instantiation) 則是利用這個藍圖來創造具體的實例,讓物件具備類別所定義的特性和行為。

實體化的目的

  1. 創建物件:透過實體化,你能在程式中建立出真實存在的物件,這些物件擁有該類別所描述的特性和行為。比方說,若有一個描述汽車的類別,你可以實體化它來建立一輛具體的汽車物件。
  2. 賦予特性和行為:當你實體化一個類別時,能夠設置物件的屬性(如名字、年齡、大小等),並使用物件所擁有的函數或方法(如發出聲音、執行動作等)。這使得程式能夠模擬現實世界中的物件和其行為。
  3. 程式模組化:利用類別和實例,你可以將程式模組化,將相似功能或特性的物件歸納在同一類別中。這有助於程式碼的結構化和維護,提升程式碼的可讀性和可擴展性。

簡而言之,實體化讓你能依照類別的定義來建立具體的物件,並在程式中使用這些物件,是物件導向程式設計中相當重要的概念之一。

Class 實體化範例

class Animal(val name: String, val age: Int) {
fun makeSound() {
println("$name 發出聲音了!")
}
}

fun main() {
// 實體化 Animal Class
val myAnimal = Animal("小白兔", 2)

// 存取實例的屬性和函數
println("這隻動物叫做 ${myAnimal.name},年齡是 ${myAnimal.age} 歲。")
myAnimal.makeSound()
}

在這個範例中,我們建立了一個名為 Animal 的類別,有兩個屬性:name(名字)和 age(年齡),同時還有一個 makeSound() 函數,能讓動物發出聲音。

接著,使用 Animal("小白兔", 2) 來實體化 Animal 類別的一個實例,並賦予名字為 "小白兔"、年齡為 2 歲。最後,透過 myAnimal.namemyAnimal.age 存取了這個實例的屬性,以及使用了 myAnimal.makeSound() 呼叫了 makeSound() 函數。

這樣,我們成功實體化了一個類別,並創建了它的實例,能夠存取其屬性和函數。這就是在 Kotlin 程式語言中實體化類別的基本方法!

實體化時的問題

class MyClass {
init {
println("MyClass init ...")
}

fun myFun() {
println("MyClass myFun ...")
}
}

fun main(){
println(MyClass())//MyClass@7c75222b
println(MyClass())//MyClass@4c203ea1
}

在這個範例中,每次實例化類別時,都會執行一次 init,產生獨立的物件。這樣不斷地建立新物件容易導致資料不一致或錯誤。執行程式碼後,會發現類似 MyClass@xxxx 格式的兩種不同結果,每次都不同,代表建立了兩個不同的物件。然而,有時你想要在所有物件間共享特定資料,該怎麼做呢?這時你可以使用 Singleton 單例模式來解決這個問題,在接下來的章節中將會深入探討這個主題。

實戰範例:購物車實體化問題

class CartManager {
fun addToCart(item: Item) {
// 加入商品到購物車的邏輯
}
}

CartManager().addToCart(item1) //生成第一台購物車,放入商品 item1
CartManager().addToCart(item2) //生成第二台購物車,放入商品 item2

這個概念相當重要,筆者再舉一個實際例子來補充說明。在這個範例中,對這個概念不熟悉的初學者,可能會誤以為兩樣商品被放到同一台購物車,但實際上,在沒有使用單例模式的情況下,程式實體化過程會導致產生兩個購物車的。這不僅浪費了記憶體資源,也造成程式發生無法預期的嚴重錯誤。我們預期的結果是將 item1 和 item2 放進同一台購物車中。


avatar-img
10會員
231內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液