C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记09--构造方法/析构方法/继承/多态/封装...
一.構(gòu)造方法
當(dāng)創(chuàng)建一個(gè)類時(shí), 系統(tǒng)會自動創(chuàng)建一個(gè)默認(rèn)的無參構(gòu)造方法, 這個(gè)方法和類同名, 在創(chuàng)建對象的時(shí)候自動調(diào)用. 默認(rèn)的構(gòu)造方法里面什么也沒有, 重寫之后就可以在創(chuàng)建對象的時(shí)候同時(shí)搞點(diǎn)事情了.
構(gòu)造方法主要負(fù)責(zé)對類里面的字段進(jìn)行初始化。
1.1 格式:
public1.2 注意事項(xiàng):
二.析構(gòu)方法
2.1 使用: 對象銷毀之前都會自動調(diào)用析構(gòu)方法
形象的來說, 我們玩游戲的時(shí)候把boss打死之后, boss會爆出各種裝備金幣,藍(lán)啊之類的, 這些方法我們就可以在析構(gòu)方法里面寫;
2.2 語法:
~2.3 注意:
三.繼承
3.1 概念:
繼承用于創(chuàng)建可重用、擴(kuò)展和修改在其他類中定義的行為的新類。 其成員被繼承的類稱為“基類”,繼承這些成員的類稱為“派生類”。 派生類只能有一個(gè)直接基類(C#中))。 但是,繼承是可傳遞的。 如果 ClassB 派生出 ClassC,ClassA 派生出 ClassB,則 ClassC 會繼承 ClassB 和 ClassA 中聲明的成員。
3.2 格式:
class學(xué)過構(gòu)造方法之后, 就想給每個(gè)類都寫個(gè)構(gòu)造方法,以便簡化初始化操作. 但是嘗試過后發(fā)現(xiàn)如果父類寫了帶參數(shù)的構(gòu)造方法, 子類就會報(bào)錯(cuò)了, 如何解決? base帶你飛.
3.3 繼承父類的構(gòu)造方法:
孩子在創(chuàng)建對象的時(shí)候, 會先調(diào)用父類的構(gòu)造方法, 如果父類是無參的就沒有影響, 但是如果父類有有參數(shù)的構(gòu)造方法, 孩子就需要傳參數(shù). 調(diào)用父類有參的構(gòu)造方法有兩個(gè)方法:
3.4 注意:
子類在繼承的時(shí)候不管想不想都會繼承父類的所有字段和方法, 那么如果子類想用同樣的方法搞特殊呢? 那就要引入多態(tài)了.
四.多態(tài)
栗子: 就拿我們創(chuàng)建的僵尸們來說, 僵尸都會攻擊, 但是普通僵尸(小口咬), 路障僵尸(大口咬)和鐵桶僵尸(超大口咬)的攻擊方法不同, 這就是多態(tài);
4.1重寫父類方法的多態(tài):
1.在訪問修飾后面加上new關(guān)鍵字后重寫:// 父類的Attack方法那么問題來了, 我雖然重寫了父類的Attack方法, 但是我在某個(gè)地方還是想要使用父類的Attack方法的時(shí)候怎么辦呢?
加上base關(guān)鍵字:// 子類中 結(jié)果小結(jié)base:
4.2 virtual override 的多態(tài)
用這種方法來實(shí)現(xiàn)多態(tài)需要做兩件事情:
1> 將父類中要實(shí)現(xiàn)多態(tài)性的方法改成虛方法, 即在返回值類型前加關(guān)鍵字 virtual:// 僵尸父類 2>子類重寫父類的方法, 即將方法隱藏的關(guān)鍵字 new 改為 override.// 路障僵尸子類 多態(tài)的運(yùn)行結(jié)果假如說現(xiàn)在有20個(gè)路障僵尸和10個(gè)鐵桶僵尸, 他們現(xiàn)在都要進(jìn)行攻擊怎么實(shí)現(xiàn)? 借助數(shù)組唄. 那么問題又來了, 數(shù)組類型是什么? 數(shù)組中既有路障僵尸類又有鐵桶僵尸類, 那想著能不能定義成他們的父類普通僵尸類呢? 要解決這個(gè)問題就需要用到里氏轉(zhuǎn)換了.
4.3里氏轉(zhuǎn)換
里氏轉(zhuǎn)換的本質(zhì)其實(shí)就是將父類強(qiáng)制轉(zhuǎn)換成子類.4.3.1 里氏轉(zhuǎn)換第一原則
子類對象可以直接賦值給父類對象// Main函數(shù)中4.3.2 里氏轉(zhuǎn)換第二原則
父類可以通過強(qiáng)制轉(zhuǎn)換的方式轉(zhuǎn)換成子類, 此時(shí)就可以調(diào)用子類中的成員了使用 as 關(guān)鍵字進(jìn)行強(qiáng)轉(zhuǎn)即使不成功也不會報(bào)錯(cuò), 而是返回 null, 但是強(qiáng)行的 "ozb = (OstableZomby)zb" 轉(zhuǎn)換如果不成功的話, 程序就會報(bào)錯(cuò)終止.
那么現(xiàn)在我們就是將數(shù)組問題解決了:
// Main函數(shù)中五.封裝
在C#中, 可以把類里面的這些字段進(jìn)行私有化保護(hù), 并為其添加共有屬性, 在類的外面不能通過對象直接訪問這些字段, 想要訪問只能通過訪問屬性的方式來完成, 這就是封裝. 具體操作在記錄屬性的時(shí)候其實(shí)就已經(jīng)寫了, 這里就不再記錄了.
補(bǔ)充.結(jié)構(gòu)體和類的區(qū)別:
=======================================================
思維導(dǎo)圖
總結(jié)
以上是生活随笔為你收集整理的C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记09--构造方法/析构方法/继承/多态/封装...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卓越性能代码_编程语言性能实测,Go比P
- 下一篇: github流程图_10月份Github