【Kotlin 入門指南】繼承 (Inheritance)

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

繼承

繼承是物件導向程式設計中一個重要的概念,它允許你建立一個新的類別,這個類別可以繼承另一個已存在的類別的特性和行為。在 Kotlin 程式語言中,繼承可以幫助你建立出更具結構化和可維護性的程式碼。

繼承基本用法範例

在 Kotlin 程式語言中,使用 : 符號來表示一個類別繼承自另一個類別。語法如下:

// 定義父類別(基礎類別)
open class 父類別名稱 {
// 屬性與函數
}

// 定義子類別(衍生類別),並繼承父類別
class 子類別名稱 : 父類別名稱() {
// 子類別特有的屬性與函數
}

在這個範例中,子類別名稱 會繼承 父類別名稱 的屬性與函數。使用 open 關鍵字來聲明父類別,表示這個類別可以被繼承。預設一般類別 class 都是關閉的,需特別在 class 前方加入 open 關鍵修飾詞,才能讓其他類別繼承。而類別中的屬性與方法也是,需特別在前方加入 open 關鍵字,才能讓繼承的子類別覆寫。否成編譯會報錯誤。

方法覆寫範例

子類別可以覆寫父類別中的函數,以提供自己的實現邏輯。在父類別的函數前加上 open,並在子類別中使用 override 來重新實現該函數。

//父類別
open class SuperClass{
open val myName = "HKT"
open fun myFun() {
println("MyPClass")
}
}

//子類別
class SubClass() : SuperClass() {
override val myName = "Hello"
override fun myFun() {
println("SubClass")
}
}

fun main() {
println(SubClass().myName)//Hello
SubClass().myFun()//SubClass
}

在這個範例中,SuperClass 是一個開放的類別,可以被其他類別繼承。它包含了一個名為 myName 的屬性以及一個名為 myFun() 的函數,並且這兩者皆使用了 open 關鍵字。這表示其他子類別可以覆寫(override)這個類別的屬性和函數,修改其功能或特性。

接著定義SubClass 繼承 SuperClass 的子類別,並且我們在這裡覆寫了 myName 屬性和 myFun() 函數。在 SubClass 中,myName 的值被改寫為 "Hello",而 myFun() 函數印出 "SubClass"

main() 函數中,我們創建了 SubClass 的實例,並分別使用 println(SubClass().myName)SubClass().myFun() 來印出屬性 myName 的值和執行 myFun() 函數。

protected 範例

若想要保護特定的屬性或方法,可以在它們前面加上「protected」關鍵字,這樣僅限繼承的子類別才能存取到這些內容。

//父類別
open class SuperClass{
protected open val myName = "HKT"
protected open fun myFun() {
println("MyPClass")
}
}

//子類別
class SubClass() : SuperClass() {
public override val myName = "Hello"
public override fun myFun() {
println("SubClass")
}
}

fun main() {
println(SuperClass().myName)//錯誤
SuperClass().myFun()//錯誤
}

在這範例中,在 main() 函數中,我們創建了 SubClass 的實例,並分別使用 println(SubClass().myName)SubClass().myFun() 來嘗試存取印出屬性 myName 的值和執行 myFun() 函數,但因為在SuperClass 中被 protected 起來,所以直接呼叫會發生不錯誤。

當屬性或函數被標記為 protected 時,它們僅能在宣告它們的類別或其子類別中使用,而無法在其他地方直接存取。所以 SubClass中,可以覆寫 SuperClass 的屬性與函數,因為他是子類別他繼承了 SuperClass

3會員
176內容數
本指南將以清晰易懂的方式介紹基礎概念,讓你能夠快速上手,輕鬆踏上學習 Kotlin 的旅程 透過簡單易懂的方式,讓你將能夠在短時間內建立起對 Kotlin 的基本了解,並開始實際應用於你的專案之中。不論你是想要進入 Android 開發領域或者只是想探索新的程式語言,這份指南都會成為你學習 Kotlin 的理想起點。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
學習 Kotlin 系列:一生綁定 val v.s 自由任命 var行程 (Process),正如其名,指的是正在執行的程式 (Program),變數在其之中,是獲得命名,能保留自我的少數特殊存在。如果變數屬於全域變數 (Global Value),那麼其生命週期就會和行程一致,其他較短生命週期的都是局部變數 (Local Value)。 從一而終,在生命中止前不變
Thumbnail
avatar
Kate
2020-07-20
學習 Kotlin 系列:變數資料型別 正數相加可為負接續上次的士兵類別,提到名字用了 String 變數。 String 是字串的意思,在 Kotlin 裡,常見變數可以分成幾個基本資料型別:數字(Number)、字串(String)、布林(Boolean)。 差別在於行為模式不同,以加法為例,數字執行數學課上的四則運算的加法,字串卻做了連接,布林則
Thumbnail
avatar
Kate
2020-06-02
學習 Kotlin 系列:類型、物件、變數 出來吧,我的士兵作為指揮官,如果只有一個部下也太令人傷心了。 為能夠有效率的取得大量的士兵,使用類型(Type)來廉價批發。 建立一個檔案「士兵.kt」,這次選 class,讓 IDE 幫我們初始化類別的程式碼 。 建立一個檔案「士兵.kt」,選 class 。  IDE 預設將 class 取名和檔案一樣。 初級
Thumbnail
avatar
Kate
2020-05-22
學習 Kotlin 系列:函數、參數 yes, my master程式是個單純的小伙子,他會按照程式碼的內容執行動作,所以我們可以把函數當作給他的指令「單位」,不是最小單位,就只是單位。 以下是令人熱血沸騰的情境: 「射擊準備!發射角度東偏南33度,目標距離200公尺,風向正西速度每小時100公里,氣溫38度,濕度百分之20。」 「yes, my master.」
avatar
Kate
2020-05-17
學習 Kotlin 系列:建立檔案現在,開始建立第一個檔案吧,一樣用最簡單的 Hello World 示範。 在 kotlin 資料夾按右鍵選擇 New 裡的 Kotlin File/Class 。 雖然有許多格式可以選,但其實只是 IDE 提供初始程式碼的差別,完全可以中途更改,我們這次選最基本的 File 格式就好。 命名檔案和
Thumbnail
avatar
Kate
2020-05-14
學習 Kotlin 系列:Hello World會撰寫 Hello World 程式,證明我們已經推開程式語言的大門,成為會寫這門語言的開發者,所以,現在就先來寫 Hello World 吧。 目標:印出 Hello World 這串文字。
Thumbnail
avatar
Kate
2020-05-09
學習 Kotlin 系列:建立專案所謂專案,就是項目,或者說是主題。 比如說我今天打算寫個猜數字遊戲,於是就建立一個名為「猜數字」的專案。 如果要和外國人合作開發,專案名稱取英文會比較好,雖然不是每個外國人英文都很好,但是工程師要有基本的英文閱讀能力,科技界很多第一手消息都是英文,我們用的開發介面 Intellij IDEA
Thumbnail
avatar
Kate
2020-05-07
學習 Kotlin 系列:物件導向語言也許有人聽過, Kotlin 是物件導向語言。 既然都特別提了,肯定還有其他種語言,那就是程序導向語言。 最大的差別就是因為物件導向語言有了物件的概念,所以有了三大能力:繼承(Inheritance)、封裝(Encapsulation)和多型(Polymorphism)。
avatar
Kate
2020-05-06
學習 Kotlin 系列:安裝 IDE到官方網站 https://www.jetbrains.com/idea/ 下載名為 IntelliJ IDEA 的 IDE (整合開發環境:意味著撰寫、編譯、連結、除錯、執行等步驟全都包)。 因為安裝只要按照預設選項不停地點下一步,所以就不另做說明了,如果讀者有遇到安裝問題,可以留言提問。
avatar
Kate
2020-05-05
Kotlin Heroes contest 練習這幾天參加了 Kotlin Hero 程式競賽前的練習,有個特別的體驗。 看題目一邊理解題意時,一邊就會在心理想像出程式流程的設計長得怎麼樣,比如輸入數值的型態為何?需不需要字串拆解?用什麼迴圈或遞迴編碼結構?一邊實作出來。或是歸納題意後,用數學運算公式整理簡化,比如真值表簡化換算,或是套用等差級數
Thumbnail
avatar
吳欣展
2020-02-26