版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第五講 面向?qū)ο缶幊?二)繼承、封裝和多態(tài)14.3 繼承、封裝和多態(tài)4.3.1 繼承4.3.2 封裝4.3.3 多態(tài)4.3.4 this和base關(guān)鍵字24.3.1 類的繼承 繼承的意思是一個類可以建立在另一個類的基礎(chǔ)上,可以繼承另一個類的屬性和方法。我們把被繼承的類叫做基類,通過繼承產(chǎn)生的類叫做派生類(也可以叫做父類和子類)。繼承的概念來源與現(xiàn)實的生活,比如汽車、輪船、火車飛機等就是繼承于交通工具這個類,而汽車類中又可以派生出新的類,比如轎車、面包車等等。 引入繼承可以讓我們重用以前寫過的代碼,新編寫的代碼可以在原來的基礎(chǔ)上繼承而來。 在C#中繼承的方式就是定義派生類。 在C#中,所有的類都
2、是通過直接或間接地繼承Object類得到的。31. 派生子類定義派生類的基本形式:class 派生類名字:基類名字 派生類的代碼;public class Parent public Parent( ) .定義一個構(gòu)造函數(shù) public void WriteItem( ) .定義方法 public class Child:Parent public Child( ) . 派生類的構(gòu)造函數(shù) public static void Main( ) Child a=new Child( ); a.WriteItem( ); 派生類使用基類的方法基類的構(gòu)造函數(shù)先執(zhí)行再執(zhí)行派生類的構(gòu)造函數(shù)。42. 域的繼
3、承、添加與隱藏1、域的繼承:子類可以繼承父類的所有成員。2、域的添加:在子類定義中加上新的域變量,就可以使得子類具有比父類多的屬性。如: class Student: Person string school; int score; 子類比父類多了兩個成員: school、score。3、域的隱藏:子類重新定義一個從父類中繼承的域變量。 class A public int a; class B:A new public int a;使用new修飾符來隱藏父類的同名成員a。53. 方法的繼承、添加與覆蓋1、方法的繼承:子類可以繼承父類的所有方法。2、方法的添加:在子類定義中加上新的方法,以針對
4、子類實現(xiàn)相應(yīng)的功能。比如可以在Student類中定義分?jǐn)?shù)的判斷方法。 3、方法的覆蓋:子類定義與父類同名的方法。(多態(tài)之一) (1)定義同名但參數(shù)列表不同的方法,稱為方法的重載; (2)定義同名且參數(shù)列表也相同的方法,稱為新增,這時應(yīng) 該在同名方法前面用new修飾符; (3)定義同名且參數(shù)列表也相同的方法,并且父類中的方法用abstract/virtual進(jìn)行修飾,子類中的方法用override進(jìn)行了修飾,稱為虛方法的覆蓋。6方法重載舉例class parent public int add( int x,int y ) return(x+y); class child:parent publ
5、ic int add(int x,int y ,int z) return(x+y+z); public static void Main( ) child c1=new child( ); c1.add(1,2,3); c1.add(4,5); 分別使用了自己和父類的方法。7方法隱藏舉例class parent public int add( int x,int y ) return(x+y); class child:parent new public int add(int x,int y) return(x+y+10); public static void Main( ) child
6、 c1=new child( ); c1.add(4,5); 使用了自己的方法。8虛方法覆蓋舉例Class one public void x( ) Console.WriteLine(“one_x”); public virtual void y( ) Console.WriteLine(“one_y”); Class two:one new public void x( )/隱藏父類中的同名方法 Console.WriteLine(“two_x”); public override void y( )/重寫同名方法 Console.WriteLine(“two_y”);Class test
7、 public static void Main( ) two m2=new m2(); one m1=m2;/m1指向m2實例 m1.x(); m2.x(); m1.y( ); m2.y(); 結(jié)果:one_x two_x two_y two_y94.3.2 類的封裝 類的封裝改變了用戶傳統(tǒng)的使用數(shù)據(jù)和代碼的方式,它將方法和數(shù)據(jù)包含在一起構(gòu)成一個獨立的單元,可以通過設(shè)定單元內(nèi)各個成員的的特性來控制對成員的訪問。比如將一個字段定義為private,就可以防止外界直接訪問這個字段。封裝一個類由兩種做法:1)為一個私有類定義公共讀方法和寫方法;2)使用屬性,用set和get訪問器。10public
8、 class Student private string studentname; public string getstudentname( ) return(studentname);public string setstudentname(string na) studentname=na;class App public static void Main( ) Student s1=new Student( ); s1.setstudentname(“zhanghua”); Console.WriteLine(s1.getstudentname( ); 不能使用語句s1.studen
9、tname=“zhanghua”;114.3.3 多態(tài) 多態(tài)指的是定義具有不同功能但相同名稱的方法或?qū)傩缘亩鄠€類的能力。C#中的多態(tài)可以由虛方法實現(xiàn)。 對于非虛方法,其實現(xiàn)是不變的,無論由基類實例調(diào)用還是由派生類實例調(diào)用都是相同的;而虛方法的實現(xiàn)可以由派生類取代,取代的過程稱為重寫。重寫可以取代從基類繼承的虛方法,但原虛方法的可訪問性不能改變,靜態(tài)方法和非虛方法不能被重寫?;?public virtual void Show( ) . 派生類 public override void Show( ) . 12 虛方法重寫舉例:定義基類圓形Round,有一個成員半徑,編寫構(gòu)造函數(shù)和計算面積的虛
10、方法Area( );再定義一個派生類球形Sphere,對虛方法Area進(jìn)行重寫。 class Round public double r; public Round(double r) this.r=r; public virtual double Area( ) return(3.14*r*r); class Sphere:Round public Sphere(double r):base(r) public override double Area( ) return(3.14*r*r*r); class App static void Main( ) Sphere s=new Sphe
11、re(2); Console.WriteLine(s.Area( ); 131. this關(guān)鍵字this關(guān)鍵字的作用是引用調(diào)用方法的當(dāng)前實例,它可以從構(gòu)造函數(shù)、實例方法和實例訪問器中訪問成員。用法一:使用this來訪問域和方法void sayHello( ) Console.WriteLine(“My name is”+name);與以下方法相同void sayHello( ) Console.WriteLine(“My name is”+);用法二:解決局部變量與域同名問題public Student(string name,string number)
12、=name; this.number=number;4.3.4 this和base關(guān)鍵字14this關(guān)鍵字舉例using System;public class Student public string name; public string number; public double subsidy=180; public Student(string name,string number) =name; this.number=number; public void ShowInfo( ) Console.WriteLine(“0n1”,name,number; Con
13、sole.WriteLine(“0”,AdvSubsidy.Caculate(this); public class AdvSubsidy public static double Caculate( student E) return(1.5*(E.subsidy); public class AppMain public static void Main( ) Student s1=new Student(“zhanghua”, “ 200454240”); s1.ShowInfo( ); 15this的注意事項this指的是調(diào)用的“對象”本身(1)通過this不僅可以引用該類中定義的域和
14、方法,還可以引用該類的父類中定義的域和方法;(2)在static靜態(tài)方法中,不能使用this關(guān)鍵字。162. base關(guān)鍵字:base指的是父類1) 明確指明父類的域和方法,例如,父類Person中有一個域為age,則在子類Student中用age 、 this.age 、 base.age來訪問age是完全一樣的。2) 當(dāng)子類的方法隱藏或覆蓋了父類的同名方法但又要調(diào)用父類的方法時,使用base關(guān)鍵字。3) 想使用父類的構(gòu)造方法。構(gòu)造方法是不能繼承的,但子類可以在構(gòu)造方法中調(diào)用直接父類的構(gòu)造方法,如 Student(string name,int age,string school) :bas
15、e(name,age) this.school=school;17base(用法2)舉例using System;public class A public int a=10; public void m( ) a+; Console.WriteLine(a); class B:A new public int a=20; new public void m( ) a+; / base.m( ); Console.WriteLine(a); public static void Main( ) A x=new A( ); Console.WriteLine(x.a); /10 x.m( );
16、/11 B y=new B( ); Console.WriteLine(y.a); /20 y.m( ); /11 21 如此處直接使用base.m( );則最后的結(jié)果為12而不是21。184.4 運算符重載4.4.1 運算符重載基本概念4.4.2 單目運算符重載4.4.3 雙目運算符重載194.4.1 多態(tài)之二:運算符的重載運算符可以進(jìn)行基本數(shù)據(jù)類型之間的運算,想把自己定義的類型進(jìn)行類似“”之類的運算就要用到運算符重載對于、運算符完全可以提供對應(yīng)的方法來完成,比如Decimal x,y;X+=y; 可以寫成 decimal.Add(x,y) x+=y;運算符重載的一般形式是 public s
17、tatic 返回類型 operator 運算符(參數(shù)表) 語句; 20using System;Class class1 public int x1,x2; public class1() x1=1; x2=2; public static int operator +(class1 c) c.x1=c.x1+10; c.x2=c.x2+5; Public void Show() Console.WriteLine(“0,1”,x1,x2);Class App public static void Main( ) class1 mc=new class1( ); mc.Show( ); mc+; mc.Show( ); 結(jié)果:x1=1,x2=2 x1=11,x2=74.4.2 單目運算符重載 +21using System;Class class1 public int x1,x2; public class1() x1=1; x2=2; public static class1 o
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)球拍球童拍行業(yè)銷售工作總結(jié)
- 金屬礦產(chǎn)行業(yè)技術(shù)工作總結(jié)
- 《澳門國際機場》課件
- 藥店衛(wèi)生消毒標(biāo)準(zhǔn)
- 采礦行業(yè)人事工作總結(jié)
- 翻譯行業(yè)服務(wù)員工作總結(jié)
- 《列車環(huán)境與衛(wèi)生》課件
- 2023年河北省唐山市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2021年山東省東營市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2024年湖北省武漢市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 道路施工臨時占道施工應(yīng)急保暢方案隧道
- 2024屆高考語文復(fù)習(xí):作文主題訓(xùn)練人文情懷
- 炊事員個人衛(wèi)生習(xí)慣養(yǎng)成-課件
- 粉末涂料有限公司邦定攪拌機安全風(fēng)險分級管控清單
- Clean-PVC管道粘接施工工藝標(biāo)準(zhǔn)
- 道教與中醫(yī)學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫2023年
- 四年級語文試卷選擇題100道
- 升壓站設(shè)備安裝調(diào)試工程施工質(zhì)量驗收及評定范圍劃分表
- 工程質(zhì)量安全手冊課件
- 哈工大機械原理課程設(shè)計產(chǎn)品包裝生產(chǎn)線(方案1)含運動簡圖
- 縫紉工(三級)技能理論考試題庫及答案
評論
0/150
提交評論