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

閱讀時間約 6 分鐘
【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
11會員
244內容數
哈囉!歡迎光臨我的沙龍!我是 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 追蹤
呈上篇[Python基礎]類別繼承(Inheritance) 中使用的super()並加以說明,此篇文章主要敘述使用super()有什麼好處及優點。 super():是一個內建函數,用來返回父類別的物件,以便你可以使用這個物件來呼叫父類別的方法或屬性。 這種做法的目的是在子類別中繼承並延續父類別
Thumbnail
本章節是Java入門的第八天,主要介紹物件導向的概念。這包括了類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、Lambda表達式、泛型和反射等主題。每個主題都配有相關的程式碼範例,以協助讀者更好地理解這些概念。
Thumbnail
本章節的目的是介紹 Kotlin 中的物件導向概念。這包括了類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型以及反射等概念。每一個概念都會透過範例程式碼來解釋其功能和用法。
Thumbnail
這章節的目的是介紹 Kotlin 語言中函數的基本用法和概念,包括函數的聲明、使用、參數和返回值等。通過學習這章節,讀者可以熟練掌握如何在 Kotlin 中定義和使用函數,來解決各種問題。
Thumbnail
本文總結和介紹了Kotlin的基本語法、註解和變數的使用,透過實例進行講解,以幫助讀者更好地理解和快速上手Kotlin語言。
Thumbnail
這個章節主要介紹了Swift程式語言中物件導向程式設計的基本概念,包括類別、建構子、公開、私有、受保護等等的概念。同時,也介紹了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射等進階特性。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
[Python基礎]淺談類別 先前淺談了類別的用法,這次要在來研究一下類別繼承的概念。 延續蛋糕的案例的概念,同樣為食物,所以可以由食物當作父類別來延伸,蛋糕則是食物的子類別,若同樣為食物一定有相同的方法(函式)是固定的跟名字(屬性),可以讓子類別(蛋糕)來繼承沿用,然後也有其他子類別也可以繼承
上一篇文章提到有些介面不應被繼承,但物件導向的子類別只能繼承父類別的介面,因而產生一些不合適的介面實作。trait/typeclass則沒有這種繼承機制,這似乎使需要繼承的特性無法直接使用。然而函數式導向比起繼承,更適合使用組合,根本不需要使用繼承疊加特性。 資料類型的定義往往跟怎麼建構模型相
類似於trait/typeclass的特性系統能提供程式「延展性」,它能讓函式針對不同的類型做出不同的行為。這種機制與物件導向的繼承非常像,然而特性系統的彈性比較大一點,而且概念上也有一些差別。為了探討討論這些差異,我們必須深入了解繼承機制到底是什麼。 繼承並不是建立子類關係的唯一方法。所謂的
呈上篇[Python基礎]類別繼承(Inheritance) 中使用的super()並加以說明,此篇文章主要敘述使用super()有什麼好處及優點。 super():是一個內建函數,用來返回父類別的物件,以便你可以使用這個物件來呼叫父類別的方法或屬性。 這種做法的目的是在子類別中繼承並延續父類別
Thumbnail
本章節是Java入門的第八天,主要介紹物件導向的概念。這包括了類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、Lambda表達式、泛型和反射等主題。每個主題都配有相關的程式碼範例,以協助讀者更好地理解這些概念。
Thumbnail
本章節的目的是介紹 Kotlin 中的物件導向概念。這包括了類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型以及反射等概念。每一個概念都會透過範例程式碼來解釋其功能和用法。
Thumbnail
這章節的目的是介紹 Kotlin 語言中函數的基本用法和概念,包括函數的聲明、使用、參數和返回值等。通過學習這章節,讀者可以熟練掌握如何在 Kotlin 中定義和使用函數,來解決各種問題。
Thumbnail
本文總結和介紹了Kotlin的基本語法、註解和變數的使用,透過實例進行講解,以幫助讀者更好地理解和快速上手Kotlin語言。
Thumbnail
這個章節主要介紹了Swift程式語言中物件導向程式設計的基本概念,包括類別、建構子、公開、私有、受保護等等的概念。同時,也介紹了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射等進階特性。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
[Python基礎]淺談類別 先前淺談了類別的用法,這次要在來研究一下類別繼承的概念。 延續蛋糕的案例的概念,同樣為食物,所以可以由食物當作父類別來延伸,蛋糕則是食物的子類別,若同樣為食物一定有相同的方法(函式)是固定的跟名字(屬性),可以讓子類別(蛋糕)來繼承沿用,然後也有其他子類別也可以繼承
上一篇文章提到有些介面不應被繼承,但物件導向的子類別只能繼承父類別的介面,因而產生一些不合適的介面實作。trait/typeclass則沒有這種繼承機制,這似乎使需要繼承的特性無法直接使用。然而函數式導向比起繼承,更適合使用組合,根本不需要使用繼承疊加特性。 資料類型的定義往往跟怎麼建構模型相
類似於trait/typeclass的特性系統能提供程式「延展性」,它能讓函式針對不同的類型做出不同的行為。這種機制與物件導向的繼承非常像,然而特性系統的彈性比較大一點,而且概念上也有一些差別。為了探討討論這些差異,我們必須深入了解繼承機制到底是什麼。 繼承並不是建立子類關係的唯一方法。所謂的