【中低階級】-[物件導向]-三大特性-繼承

更新於 發佈於 閱讀時間約 5 分鐘
二、繼承(inheritance)
  繼承就是假如A(子)類別去繼承B(父)類別,那麼A(子)類別可以直接去使用B(父)類別非私有的屬性和方法,但是A(子)只能繼承一個B(父)類別ㄛ!
  一樣的道理可以比喻為:爸爸跟小孩之間的關係。小孩可以去運用爸爸的資源,但是爸爸的工作屬於他自己的不能跟小孩一起分享,雖然小孩可以使用爸爸的資源,但是理論上只會有一個爸爸,不可能有其他爸爸的存在。
在繼承當中父、子類別有個稱呼要知道一下
1.父類別又稱「基底類別」(Base Class)
2.子類別又稱「衍生類別」(Derived Class)
通常我都用父類別、子類別來稱呼。子類別除了可以使用父類別的屬性和方法外,還可以擴充與修改父類別的行為哦!會用到之後會再提到override(覆寫)相關的功能,例如:virtual(虛擬)、abstract(抽象)等等相關宣告會用到的詞。
  也就是說小孩可以直接學習爸爸的能力外,還可以擴充自己的能力,甚至是將爸爸的能力學好後再優化變成現在的資訊科技化,譬如:爸爸會將客戶資料一筆一筆寫入到筆記本中,那小孩就學會這能力後又更上層樓直接建立資料庫做管理,這樣在管理上就方便多了。這樣是不是小孩的能力擴充了一項技能就是建立資料庫,並且也修改了爸爸平常用紙筆傳統式紀錄變成到電腦上做key in的動作了呢?
好啦!理論太枯燥乏味直接來看看程式好了,到底是怎麼運行的呢?
Step1建立父類別
Step2建立子類別
Step3 介面設計 與 主程式撰寫
Step4 程式執行
繼承所呈現的語法會是
class B
{
  父類別的敘述;
}
class A:B
{
  子類別A繼承父類別B的敘述;
}
來看一下實際例子

實際例子1.無使用建構函數

父類別(無建構函數)
子類別(無建構函數)
主程式(無建構函數)
執行結果(無建構函數)
說明:
1.【ClassAnimal是父類別】:把共同有的「屬性欄位」與「方法動作」都在這裡做宣告
(1)第13-14行:動物共同會有的動物名字name、動物年齡age,因為未使用建構函式,因此在宣告時就做公開public大家都可以使用
(2)第15行:想交給子類別去做設計要做什麼動作又必須要有動作時可以使用abstract(抽象),看到abstract(抽象)就是子類別就一定要去做覆寫,因此使用abstract(抽象),就要將這個父類別前面多加一個abstract(抽象)的修飾詞。
(3)第17-20行:父類別做的事就是傳回字串(顯示字串)「開始說話」

2.【classDog是子類別】:因為要繼承父類別,因此在classDog後多加入「:ClassAnimal」
(1)第11行:這邊的宣告是屬於classDog的欄位,假若有另外建一個classCat的子類別,它的父類別一樣也是ClassAnimal的話,classCat就無法使用classDog類別的kind欄位
(2)第13-16行:這是要去覆寫父類別的Action()方法,classDog類別做的事就是傳回字串(顯示字串)「我正在走路」

3.【主程式】:先在介面上新增一個button和label,觸發方法為按下此button(顯示繼承文字的按鈕)後執行程式
(1)第63行:建立一個classDog類別格式的物件,命名為dog
(2)第64-66行:那麼dog可以使用它的父類別所定義的欄位(也就是name、age),也可使用它自己所定義的欄位(kind)
(3)第67-68行:利用label顯示結果,dog.Talk()、dog.name、dog.age是因為dog有繼承父類別,因此可以使用父類別的方法。dog.kind是屬於dog本身定義本來就可以使用,dog.Action()雖然有繼承父類別的方法但是因為需要覆寫,引此取得的資料會是dog類別中所做的事。

4.【執行結果】:可以跟主程式label所寫的內容相對應。

實際例子2.有使用建構函數

父類別(使用建構函數)
子類別(使用建構函數)
主程式(使用建構函數)
執行結果(使用建構函數)
說明:
1.【ClassAnimal是父類別】:
(1)第30-33行:變動的地方只有欄位部分改成建構函數的參數,裡面的敘述(也就是大括號{ } )可以不用寫
(2)其他abstract抽象方法和Talk()這個方法就不用變

2.【classDog是子類別】:
(1)第28-33行:因為要接父類別的參數,所以在使用建構函數的時候語法為:
public 類別名稱(參數):base(父類別的參數)
那麼父類別的參數變數就把它一模一樣寫過來,接著再將這些參數放入到子類別的參數中去也是要寫一模一樣的參數哦!若想要在此類別增加其他參數也可以,就如同string Kind。
(2)第24-26行:由於想要將參數在此類別中使用,那就在此做宣告,便可以在第28-33行取得傳入的內容值
(3)第38行:Action顯示內容部分呢!就可以從取得的內容值賦予給此類別宣告的變數上直接做使用即可

3.【主程式】:
由於內容值都要傳到類別去使用,因此主程式只要將內容值輸入到建立物件的類別參數中後,接下來就動用方法即可,不用還要再個別輸入內容值,故主程式會簡短許多。

4.【執行結果】:可以跟主程式label所寫的內容相對應。
※可以先從父類別看到程式執行結果後,再從執行結果往回看到父類別,這樣應該就可以更懂的是怎麼樣運行的。自己也一定要操作看看ㄛ!多操作幾遍多看就會熟了。

即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
21會員
43內容數
Hello~ Welcome to my blog~❤ 這邊會分享我在程式這條道路中的學習與成長, 過程中從而了解自己的不足,再學習。 希望透過分享的方式, 也讓正在學習程式的夥伴們一起學習, 我們一起加油吧~ 「彼此都會成為彼此之間的影響力」(´,,•ω•,,)♡ ❣
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
橙果杏的沙龍 的其他內容
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
  物件導向(Object Oriented Programming,又稱OOP),在程式領域中很常會看到一些英文代稱,如果不懂的話就比較會不知道在說些什麼,所以除了知道中文名稱外也要稍微知道一下它的代稱是什麼會比較好唷! 一、什麼是物件導向?   把程式寫出來的功能集合成一個類別(class),接
亂數是要做什麼用的?生活中其實有很多有關亂數的事,例如說:樂透摸彩、抽籤、驚喜包、中獎者、擲骰子等等都是跟亂數有關哦!它們都是將所有的數都丟進去一個空間裡再隨機抽取,在不重複的狀況下每一個數抽到的機率都是一樣的。 在程式中也有這個玩法哦!但是說是這麼說到底怎麼用,咱們來看看: 語法: 在隨機抽取的時
資料集中除了陣列這個外,還有另一個好幫手就是List,它跟陣列很像,我們直接來看一下怎麼用: 它的語法: 1.給予值 (1)單一新增: (2)陣列式新增: 例子: 2.取值 (1)foreach迴圈方式 (2)單一取值 3.取得List有多少個內容值 4.排序 想要反轉就再使用↓ 5.插入 6.複製
陣列運用、擷取字串   對於陣列裡的內容值除了把資料存進去外,若想要知道陣列維度、陣列大小、複製陣列的值到另一個陣列中、清除陣列的值等等的相關處理,甚至比較常用到的可能還需要做資料排列、查找資料等等,此時C#有一些屬性方法可以幫助到我們,不用寫複雜的迴圈,來看一看有哪些吧~
  陣列就陣列怎麼還有不規則陣列呢?一維陣列就一排沒什麼大問題,但是!二維以上的多維陣列不知道有沒有發現大家的長度都是一致的?用三維來說組合起來的箱子不是四邊形,就是長(正)方體,那麼不規則陣列組合起來就不一定是完整的長(正)方體了,可能就會出現東缺一腳、西缺一角的情形發生,我們用三維的圖形來表示:
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
  物件導向(Object Oriented Programming,又稱OOP),在程式領域中很常會看到一些英文代稱,如果不懂的話就比較會不知道在說些什麼,所以除了知道中文名稱外也要稍微知道一下它的代稱是什麼會比較好唷! 一、什麼是物件導向?   把程式寫出來的功能集合成一個類別(class),接
亂數是要做什麼用的?生活中其實有很多有關亂數的事,例如說:樂透摸彩、抽籤、驚喜包、中獎者、擲骰子等等都是跟亂數有關哦!它們都是將所有的數都丟進去一個空間裡再隨機抽取,在不重複的狀況下每一個數抽到的機率都是一樣的。 在程式中也有這個玩法哦!但是說是這麼說到底怎麼用,咱們來看看: 語法: 在隨機抽取的時
資料集中除了陣列這個外,還有另一個好幫手就是List,它跟陣列很像,我們直接來看一下怎麼用: 它的語法: 1.給予值 (1)單一新增: (2)陣列式新增: 例子: 2.取值 (1)foreach迴圈方式 (2)單一取值 3.取得List有多少個內容值 4.排序 想要反轉就再使用↓ 5.插入 6.複製
陣列運用、擷取字串   對於陣列裡的內容值除了把資料存進去外,若想要知道陣列維度、陣列大小、複製陣列的值到另一個陣列中、清除陣列的值等等的相關處理,甚至比較常用到的可能還需要做資料排列、查找資料等等,此時C#有一些屬性方法可以幫助到我們,不用寫複雜的迴圈,來看一看有哪些吧~
  陣列就陣列怎麼還有不規則陣列呢?一維陣列就一排沒什麼大問題,但是!二維以上的多維陣列不知道有沒有發現大家的長度都是一致的?用三維來說組合起來的箱子不是四邊形,就是長(正)方體,那麼不規則陣列組合起來就不一定是完整的長(正)方體了,可能就會出現東缺一腳、西缺一角的情形發生,我們用三維的圖形來表示:
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
呈上篇[Python基礎]類別繼承(Inheritance) 中使用的super()並加以說明,此篇文章主要敘述使用super()有什麼好處及優點。 super():是一個內建函數,用來返回父類別的物件,以便你可以使用這個物件來呼叫父類別的方法或屬性。 這種做法的目的是在子類別中繼承並延續父類別
Thumbnail
兩岸繼承法第一順位法定繼承人的差異(一):父母 |法律百科 Legispedia (legis-pedia.com)
Thumbnail
探討師生關係與親子關係的異同,指出大人對孩子的期望與對待方式,以及孩子在這種關係中的角色。建議大人可以用生態觀察的角度看待孩子的成長,接受並欣賞每一個孩子獨特的樣貌。
※ OPP第三大核心-多型 ※ 多型的基本定義: 多型是利用繼承的特性,讓不同的子類別可以實現相同的介面,但在呼叫這些介面的方法時會表現出不同的行為。這使得程式設計更具彈性和擴展性,避免了複雜的條件判斷式,同時促進了代碼的重用。 class Animal { makeSound() {
當 父組件 有數據想傳送到 子組件 就可以使用props 1​. 父層傳遞設置 可以在父組件的屬性給予一個值,當作要傳送到子組件的資料。 父層組件​ : <!-- App.vue (父組件) --> <template> <div> <ChildComponent greetin
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
在使用類別創建實例時,輸入的屬性的都要定義好資料型態,例如dog_1 = Dog("Buddy", 3),有沒有輸入一段字串讓他自己判斷的方法阿? 有的就是使用classmethod: classmethod 是一種裝飾器,它用於定義類別方法。類別方法與實例方法不同,它們被綁定到類別而不是實例。
Thumbnail
[Python基礎]淺談類別 先前淺談了類別的用法,這次要在來研究一下類別繼承的概念。 延續蛋糕的案例的概念,同樣為食物,所以可以由食物當作父類別來延伸,蛋糕則是食物的子類別,若同樣為食物一定有相同的方法(函式)是固定的跟名字(屬性),可以讓子類別(蛋糕)來繼承沿用,然後也有其他子類別也可以繼承
上一篇文章提到有些介面不應被繼承,但物件導向的子類別只能繼承父類別的介面,因而產生一些不合適的介面實作。trait/typeclass則沒有這種繼承機制,這似乎使需要繼承的特性無法直接使用。然而函數式導向比起繼承,更適合使用組合,根本不需要使用繼承疊加特性。 資料類型的定義往往跟怎麼建構模型相
類似於trait/typeclass的特性系統能提供程式「延展性」,它能讓函式針對不同的類型做出不同的行為。這種機制與物件導向的繼承非常像,然而特性系統的彈性比較大一點,而且概念上也有一些差別。為了探討討論這些差異,我們必須深入了解繼承機制到底是什麼。 繼承並不是建立子類關係的唯一方法。所謂的
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
呈上篇[Python基礎]類別繼承(Inheritance) 中使用的super()並加以說明,此篇文章主要敘述使用super()有什麼好處及優點。 super():是一個內建函數,用來返回父類別的物件,以便你可以使用這個物件來呼叫父類別的方法或屬性。 這種做法的目的是在子類別中繼承並延續父類別
Thumbnail
兩岸繼承法第一順位法定繼承人的差異(一):父母 |法律百科 Legispedia (legis-pedia.com)
Thumbnail
探討師生關係與親子關係的異同,指出大人對孩子的期望與對待方式,以及孩子在這種關係中的角色。建議大人可以用生態觀察的角度看待孩子的成長,接受並欣賞每一個孩子獨特的樣貌。
※ OPP第三大核心-多型 ※ 多型的基本定義: 多型是利用繼承的特性,讓不同的子類別可以實現相同的介面,但在呼叫這些介面的方法時會表現出不同的行為。這使得程式設計更具彈性和擴展性,避免了複雜的條件判斷式,同時促進了代碼的重用。 class Animal { makeSound() {
當 父組件 有數據想傳送到 子組件 就可以使用props 1​. 父層傳遞設置 可以在父組件的屬性給予一個值,當作要傳送到子組件的資料。 父層組件​ : <!-- App.vue (父組件) --> <template> <div> <ChildComponent greetin
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
在使用類別創建實例時,輸入的屬性的都要定義好資料型態,例如dog_1 = Dog("Buddy", 3),有沒有輸入一段字串讓他自己判斷的方法阿? 有的就是使用classmethod: classmethod 是一種裝飾器,它用於定義類別方法。類別方法與實例方法不同,它們被綁定到類別而不是實例。
Thumbnail
[Python基礎]淺談類別 先前淺談了類別的用法,這次要在來研究一下類別繼承的概念。 延續蛋糕的案例的概念,同樣為食物,所以可以由食物當作父類別來延伸,蛋糕則是食物的子類別,若同樣為食物一定有相同的方法(函式)是固定的跟名字(屬性),可以讓子類別(蛋糕)來繼承沿用,然後也有其他子類別也可以繼承
上一篇文章提到有些介面不應被繼承,但物件導向的子類別只能繼承父類別的介面,因而產生一些不合適的介面實作。trait/typeclass則沒有這種繼承機制,這似乎使需要繼承的特性無法直接使用。然而函數式導向比起繼承,更適合使用組合,根本不需要使用繼承疊加特性。 資料類型的定義往往跟怎麼建構模型相
類似於trait/typeclass的特性系統能提供程式「延展性」,它能讓函式針對不同的類型做出不同的行為。這種機制與物件導向的繼承非常像,然而特性系統的彈性比較大一點,而且概念上也有一些差別。為了探討討論這些差異,我們必須深入了解繼承機制到底是什麼。 繼承並不是建立子類關係的唯一方法。所謂的