【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

avatar-img
10會員
231內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
HKT實驗室 的其他內容
在 Kotlin 程式語言中,Any 類別是所有其他類別的超類別,也就是說,所有的類別都直接或間接地繼承 Any 類別。這使得 Any 成為 Kotlin 物件繼承體系的根源。
在 Kotlin 程式語言中,可見性修飾關鍵字(Visibility Modifiers)用來控制類別、物件、介面、函數和屬性的可見範圍。可見性修飾關鍵字扮演著極其重要的角色,它們確定了程式碼中各元素的可見範圍,從而影響了程式的結構、安全性以及擴展性。了解這些修飾關鍵字的作用,將有助於更好地掌握程式
本文介紹 Kotlin 中類別的定義方法與實際應用,以及類別的好處和優點。透過實例說明,讓讀者更了解如何在 Kotlin 中使用類別來實現相關功能。
Kotlin 中存取類別的屬性是一個重要的操作,透過 getter 與 setter 宣告方式讓我們可以使用 var 或 val 來宣告屬性。本篇文章介紹了在類別中宣告屬性的範例以及存取與修改屬性的操作。
本文章介紹 Kotlin 提供的自訂存取器功能,教你如何修改 getter 與 setter 方法以控制屬性的存取行為。透過自訂存取方法,你可以根據需求添加額外的邏輯,並達到更精確地控制屬性行為的目的。
本指南介紹了 Kotlin 中類別的主構造函數和次要構造函數的使用方法,並提供了相應的程式碼範例和初始化順序說明。
在 Kotlin 程式語言中,Any 類別是所有其他類別的超類別,也就是說,所有的類別都直接或間接地繼承 Any 類別。這使得 Any 成為 Kotlin 物件繼承體系的根源。
在 Kotlin 程式語言中,可見性修飾關鍵字(Visibility Modifiers)用來控制類別、物件、介面、函數和屬性的可見範圍。可見性修飾關鍵字扮演著極其重要的角色,它們確定了程式碼中各元素的可見範圍,從而影響了程式的結構、安全性以及擴展性。了解這些修飾關鍵字的作用,將有助於更好地掌握程式
本文介紹 Kotlin 中類別的定義方法與實際應用,以及類別的好處和優點。透過實例說明,讓讀者更了解如何在 Kotlin 中使用類別來實現相關功能。
Kotlin 中存取類別的屬性是一個重要的操作,透過 getter 與 setter 宣告方式讓我們可以使用 var 或 val 來宣告屬性。本篇文章介紹了在類別中宣告屬性的範例以及存取與修改屬性的操作。
本文章介紹 Kotlin 提供的自訂存取器功能,教你如何修改 getter 與 setter 方法以控制屬性的存取行為。透過自訂存取方法,你可以根據需求添加額外的邏輯,並達到更精確地控制屬性行為的目的。
本指南介紹了 Kotlin 中類別的主構造函數和次要構造函數的使用方法,並提供了相應的程式碼範例和初始化順序說明。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
行程 (Process),正如其名,指的是正在執行的程式 (Program),變數在其之中,是獲得命名,能保留自我的少數特殊存在。如果變數屬於全域變數 (Global Value),那麼其生命週期就會和行程一致,其他較短生命週期的都是局部變數 (Local Value)。 從一而終,在生命中止前不變
Thumbnail
接續上次的士兵類別,提到名字用了 String 變數。 String 是字串的意思,在 Kotlin 裡,常見變數可以分成幾個基本資料型別:數字(Number)、字串(String)、布林(Boolean)。 差別在於行為模式不同,以加法為例,數字執行數學課上的四則運算的加法,字串卻做了連接,布林則
Thumbnail
作為指揮官,如果只有一個部下也太令人傷心了。 為能夠有效率的取得大量的士兵,使用類型(Type)來廉價批發。 建立一個檔案「士兵.kt」,這次選 class,讓 IDE 幫我們初始化類別的程式碼 。 建立一個檔案「士兵.kt」,選 class 。  IDE 預設將 class 取名和檔案一樣。 初級
程式是個單純的小伙子,他會按照程式碼的內容執行動作,所以我們可以把函數當作給他的指令「單位」,不是最小單位,就只是單位。 以下是令人熱血沸騰的情境: 「射擊準備!發射角度東偏南33度,目標距離200公尺,風向正西速度每小時100公里,氣溫38度,濕度百分之20。」 「yes, my master.」
Thumbnail
現在,開始建立第一個檔案吧,一樣用最簡單的 Hello World 示範。 在 kotlin 資料夾按右鍵選擇 New 裡的 Kotlin File/Class 。 雖然有許多格式可以選,但其實只是 IDE 提供初始程式碼的差別,完全可以中途更改,我們這次選最基本的 File 格式就好。 命名檔案和
Thumbnail
會撰寫 Hello World 程式,證明我們已經推開程式語言的大門,成為會寫這門語言的開發者,所以,現在就先來寫 Hello World 吧。 目標:印出 Hello World 這串文字。
Thumbnail
所謂專案,就是項目,或者說是主題。 比如說我今天打算寫個猜數字遊戲,於是就建立一個名為「猜數字」的專案。 如果要和外國人合作開發,專案名稱取英文會比較好,雖然不是每個外國人英文都很好,但是工程師要有基本的英文閱讀能力,科技界很多第一手消息都是英文,我們用的開發介面 Intellij IDEA
也許有人聽過, Kotlin 是物件導向語言。 既然都特別提了,肯定還有其他種語言,那就是程序導向語言。 最大的差別就是因為物件導向語言有了物件的概念,所以有了三大能力:繼承(Inheritance)、封裝(Encapsulation)和多型(Polymorphism)。
到官方網站 https://www.jetbrains.com/idea/ 下載名為 IntelliJ IDEA 的 IDE (整合開發環境:意味著撰寫、編譯、連結、除錯、執行等步驟全都包)。 因為安裝只要按照預設選項不停地點下一步,所以就不另做說明了,如果讀者有遇到安裝問題,可以留言提問。
Thumbnail
這幾天參加了 Kotlin Hero 程式競賽前的練習,有個特別的體驗。 看題目一邊理解題意時,一邊就會在心理想像出程式流程的設計長得怎麼樣,比如輸入數值的型態為何?需不需要字串拆解?用什麼迴圈或遞迴編碼結構?一邊實作出來。或是歸納題意後,用數學運算公式整理簡化,比如真值表簡化換算,或是套用等差級數
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
行程 (Process),正如其名,指的是正在執行的程式 (Program),變數在其之中,是獲得命名,能保留自我的少數特殊存在。如果變數屬於全域變數 (Global Value),那麼其生命週期就會和行程一致,其他較短生命週期的都是局部變數 (Local Value)。 從一而終,在生命中止前不變
Thumbnail
接續上次的士兵類別,提到名字用了 String 變數。 String 是字串的意思,在 Kotlin 裡,常見變數可以分成幾個基本資料型別:數字(Number)、字串(String)、布林(Boolean)。 差別在於行為模式不同,以加法為例,數字執行數學課上的四則運算的加法,字串卻做了連接,布林則
Thumbnail
作為指揮官,如果只有一個部下也太令人傷心了。 為能夠有效率的取得大量的士兵,使用類型(Type)來廉價批發。 建立一個檔案「士兵.kt」,這次選 class,讓 IDE 幫我們初始化類別的程式碼 。 建立一個檔案「士兵.kt」,選 class 。  IDE 預設將 class 取名和檔案一樣。 初級
程式是個單純的小伙子,他會按照程式碼的內容執行動作,所以我們可以把函數當作給他的指令「單位」,不是最小單位,就只是單位。 以下是令人熱血沸騰的情境: 「射擊準備!發射角度東偏南33度,目標距離200公尺,風向正西速度每小時100公里,氣溫38度,濕度百分之20。」 「yes, my master.」
Thumbnail
現在,開始建立第一個檔案吧,一樣用最簡單的 Hello World 示範。 在 kotlin 資料夾按右鍵選擇 New 裡的 Kotlin File/Class 。 雖然有許多格式可以選,但其實只是 IDE 提供初始程式碼的差別,完全可以中途更改,我們這次選最基本的 File 格式就好。 命名檔案和
Thumbnail
會撰寫 Hello World 程式,證明我們已經推開程式語言的大門,成為會寫這門語言的開發者,所以,現在就先來寫 Hello World 吧。 目標:印出 Hello World 這串文字。
Thumbnail
所謂專案,就是項目,或者說是主題。 比如說我今天打算寫個猜數字遊戲,於是就建立一個名為「猜數字」的專案。 如果要和外國人合作開發,專案名稱取英文會比較好,雖然不是每個外國人英文都很好,但是工程師要有基本的英文閱讀能力,科技界很多第一手消息都是英文,我們用的開發介面 Intellij IDEA
也許有人聽過, Kotlin 是物件導向語言。 既然都特別提了,肯定還有其他種語言,那就是程序導向語言。 最大的差別就是因為物件導向語言有了物件的概念,所以有了三大能力:繼承(Inheritance)、封裝(Encapsulation)和多型(Polymorphism)。
到官方網站 https://www.jetbrains.com/idea/ 下載名為 IntelliJ IDEA 的 IDE (整合開發環境:意味著撰寫、編譯、連結、除錯、執行等步驟全都包)。 因為安裝只要按照預設選項不停地點下一步,所以就不另做說明了,如果讀者有遇到安裝問題,可以留言提問。
Thumbnail
這幾天參加了 Kotlin Hero 程式競賽前的練習,有個特別的體驗。 看題目一邊理解題意時,一邊就會在心理想像出程式流程的設計長得怎麼樣,比如輸入數值的型態為何?需不需要字串拆解?用什麼迴圈或遞迴編碼結構?一邊實作出來。或是歸納題意後,用數學運算公式整理簡化,比如真值表簡化換算,或是套用等差級數