第11講面向?qū)ο缶幊袒A(chǔ)ppt課件_第1頁(yè)
第11講面向?qū)ο缶幊袒A(chǔ)ppt課件_第2頁(yè)
第11講面向?qū)ο缶幊袒A(chǔ)ppt課件_第3頁(yè)
第11講面向?qū)ο缶幊袒A(chǔ)ppt課件_第4頁(yè)
第11講面向?qū)ο缶幊袒A(chǔ)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第第11講講 面向?qū)ο缶幊谈酌嫦驅(qū)ο缶幊谈?主講:呂震宇本講內(nèi)容 主要內(nèi)容 值類(lèi)型與援用類(lèi)型 承繼與多態(tài) 虛方法與方法覆寫(xiě) 重點(diǎn) 承繼與多態(tài) 虛方法與方法覆寫(xiě) 難點(diǎn) 多態(tài)的本質(zhì)一、值類(lèi)型與援用類(lèi)型cns/xuefeng1982/archive/2021/10/09/1579816.html值類(lèi)型與援用類(lèi)型 值類(lèi)型 直接盛放本身數(shù)據(jù) 每個(gè)變量都有本身值的一份拷貝 對(duì)一個(gè)值的修正不會(huì)影響另外一個(gè)值 援用類(lèi)型 經(jīng)過(guò)存儲(chǔ)參照對(duì)象指針存放數(shù)據(jù) 多個(gè)變量能夠指向同一個(gè)對(duì)象 對(duì)一個(gè)援用對(duì)象的修正能夠會(huì)影響到另外一個(gè)值類(lèi)型堆棧010堆baint a=10;int b;b = a;b = 9;程序代碼程序代

2、碼109援用類(lèi)型堆棧堆baCar a = new Car();Car b;b = a;b.Speed = 150;程序代碼程序代碼class Car public int Speed=60; public void Drive();Car at 00A0Speed = 60Car at 00A0Speed = 150a.Speed 如今如今也變?yōu)橐沧優(yōu)?50null00A000A0什么是 this?堆棧堆a(bǔ)Car a = new Car();a.Drive();程序代碼程序代碼class Car public int Speed=60; public void Drive() Speed +;

3、 Car at 00A0Speed : 60等價(jià)于:Drive(Car this) this.Speed+;等價(jià)于:Drive(a) a.Speed+;Speed : 6100A0值類(lèi)型與援用類(lèi)型類(lèi)型值類(lèi)型援用類(lèi)型內(nèi)置值類(lèi)型枚舉構(gòu)造數(shù)組對(duì)象接口Int32Int64StringDoubleenumstructArrayobjectinterfaceIDOwnerBalance001Tom12.56AccountAccount a1 = new Account();a1.ID = 001;a1.Owner = Tom“;類(lèi)對(duì)象Interest = 7%a1class Account public

4、string ID; public string Owner; private double balance; private static double interest = 0.07; public void ShowBalance() Console.WriteLine(“Balance is 0, balance); public static double GetInterest() return interest; double GetInterest()void ShowBalance()多個(gè)實(shí)例共享一個(gè)型,但各自存儲(chǔ)本人的屬性堆IDOwnerBalanceTom12.56堆棧0

5、0A0a1AccountInterest = 7%static double GetInterest()void ShowBalance()001VMTAccountInterest=0.7GetInterest()ShowBalance()GetInterest()的詳細(xì)實(shí)現(xiàn)ShowBalance()的詳細(xì)實(shí)現(xiàn)型類(lèi)型類(lèi)值對(duì)象值對(duì)象VMT002Jerry56.700B0a2二、承繼與多態(tài)概略請(qǐng)開(kāi)“馬自達(dá)車(chē)!請(qǐng)開(kāi)“飛馳車(chē)!請(qǐng)開(kāi)“Volvo車(chē)!“C先生從“有病說(shuō)起 病從何來(lái)? 簡(jiǎn)單的事復(fù)雜化了 只需說(shuō)“開(kāi)車(chē)就行 病因是什么? “函數(shù)名是用于區(qū)分子程序的標(biāo)識(shí) 由于函數(shù)不能重名,所以不能直接“開(kāi)車(chē) 注

6、: 可以經(jīng)過(guò)指向函數(shù)的指針處理問(wèn)題#includevoid PrintHelp();void DriveVolvo();void DriveBenz();void DriveMazda();main(int argc, char *argvs) if(argc 2) PrintHelp(); return; if(strcmp(argvs1,V)=0) DriveVolvo(); else if(strcmp(argvs1, B)=0) DriveBenz(); else if(strcmp(argvs1, M)=0) DriveMazda(); else PrintHelp(); getch

7、();void PrintHelp() printf(Please input a correct car type.(V, B, M) );void DriveVolvo() printf(Driving Volvo );void DriveBenz() printf(Driving Benz );void DriveMazda() printf(Driving Mazda ); 處理方法 以不變應(yīng)萬(wàn)變 方法的重載Overload 方法的覆寫(xiě)Override 方法重載 同一類(lèi)中允許重名方法 只需方法的“簽名不同即可 方法覆寫(xiě) 存在于多個(gè)存在“承繼關(guān)系的類(lèi) 同一方法名實(shí)現(xiàn)“多態(tài)什么是“承繼 承

8、繼指類(lèi)間的 “Is a kind of 關(guān)系 描畫(huà)類(lèi)與類(lèi)之間的關(guān)系 子類(lèi)是父類(lèi)的專(zhuān)門(mén)化泛化專(zhuān)門(mén)化MusicianViolinPlayer父類(lèi)子類(lèi)這不是面向?qū)ο蟮某欣^機(jī)動(dòng)車(chē)轎車(chē)卡車(chē)燈燈泡管燈轎車(chē) Is a kind of 機(jī)動(dòng)車(chē)卡車(chē) Is a kind of 機(jī)動(dòng)車(chē)燈泡 Is a kind of 燈管燈 Is a kind of 燈由于:機(jī)動(dòng)車(chē)可以開(kāi)并且所以:轎車(chē)可以開(kāi)、卡車(chē)可以開(kāi)由于:燈可以開(kāi)并且所以:燈泡可以開(kāi)、管燈可以開(kāi)開(kāi)車(chē)();開(kāi)車(chē)();開(kāi)車(chē)();開(kāi)燈();開(kāi)燈();開(kāi)燈();Musician?StringMusicianViolin?MusicalInstrumentplaysplay

9、splaysViolinPlayerStringedInstrument類(lèi)的承繼關(guān)系 承繼與類(lèi)的層級(jí)關(guān)系單承繼與多承繼 單承繼:只能有一個(gè)父類(lèi) C#言語(yǔ)是單承繼言語(yǔ) 多承繼:從多個(gè)父類(lèi)承繼StringedInstrumentViolinMusicalInstrumentStringedInstrumentPluckable“承繼關(guān)系的代碼實(shí)現(xiàn) 語(yǔ)法BaseDerivedclass Base class Derived : Base 承繼續(xù) 關(guān)于承繼的幾個(gè)要點(diǎn) 凡是父類(lèi)有的,子類(lèi)一定有 公有字段、方法 私有字段、方法 非靜態(tài)字段、方法 靜態(tài)字段、方法 子類(lèi)“共享父類(lèi)靜態(tài)字段 修正子類(lèi)“承繼下來(lái)的

10、父類(lèi)靜態(tài)字段,將導(dǎo)致父類(lèi)靜態(tài)字段的值發(fā)生變化。using System;public class Base public int a = 10;public class Derived : Basepublic class Client public static void Main() Derived d = new Derived(); Console.WriteLine(d.a); 結(jié)論 子類(lèi)承繼非靜態(tài)字段10請(qǐng)按恣意鍵繼續(xù). . .using System;public class Base public static int a = 10;public class Derived :

11、 Basepublic class Client public static void Main() Derived.a = 15; Console.WriteLine(Base.a); 結(jié)論 子類(lèi)承繼靜態(tài)字段 修正子類(lèi)承繼來(lái)的靜態(tài)字段值,將導(dǎo)致父類(lèi)該靜態(tài)字段值的改動(dòng)15請(qǐng)按恣意鍵繼續(xù). . .using System;public class Base public void SayHello() Console.WriteLine(Hello!); public class Derived : Basepublic class Client public static void Main(

12、) Derived d = new Derived(); d.SayHello(); Hello!請(qǐng)按恣意鍵繼續(xù). . . 結(jié)論 子類(lèi)承繼非靜態(tài)方法using System;public class Base public static void SayHello() Console.WriteLine(Hello!); public class Derived : Basepublic class Client public static void Main() Derived.SayHello(); Hello!請(qǐng)按恣意鍵繼續(xù). . . 結(jié)論 子類(lèi)承繼靜態(tài)方法using System;pu

13、blic class Base private int a = 10; public void ShowA() Console.WriteLine(a); public class Derived : Basepublic class Client public static void Main() Derived d = new Derived(); d.ShowA(); 10請(qǐng)按恣意鍵繼續(xù). . . 結(jié)論 子類(lèi)承繼私有字段 可以經(jīng)過(guò)公有方法檢測(cè)到該私有字段的存在承繼續(xù) 思索 凡是父類(lèi)有的方法,子類(lèi)一定有 凡是父類(lèi)可以做的事,子類(lèi)一定可以做 思想 李氏代換原那么 子類(lèi)可以交換父類(lèi) 但父類(lèi)不一

14、定可以交換子類(lèi)多態(tài)PolyMorphism 通俗的解釋 一個(gè)方法的執(zhí)行結(jié)果能夠這樣,也能夠那樣 終究這樣還是那樣?不知道! 多態(tài)特點(diǎn) 方法的執(zhí)行結(jié)果能夠有“多種形狀 將這樣的方法稱(chēng)為“虛方法 虛方法可以被子類(lèi)“覆寫(xiě)“多態(tài)案例CarMazdaVolvoBenzpublic class Car public virtual void Drive() Console.WriteLine(Driving Car); public class Volvo : Car public override void Drive() Console.WriteLine(Driving Volvo ); publi

15、c class Benz : Car public override void Drive() Console.WriteLine(Driving Benz ); public class Mazda : Car public override void Drive() Console.WriteLine(Driving Mazda );“多態(tài)案例續(xù)public class Client public static void Main(string argvs) static void DriveCar(Car c) c.Drive(); DriveCar(new Volvo(); Drive

16、Car(new Benz(); DriveCar(new Mazda();執(zhí)行結(jié)果是什么?Driving VolvoDriving BenzDriving Mazda請(qǐng)按恣意鍵繼續(xù). . .由于:Volvo is Car所以:Volvo can Drive因此:Drive Volvo as Car多態(tài)特點(diǎn) 不知道某段代碼的執(zhí)行結(jié)果是什么 方法名由父類(lèi)決議 方法的實(shí)現(xiàn)由子類(lèi)決議 多伴隨“虛方法和“覆寫(xiě) static void DriveCar(Car c) c.Drive(); public class Car public virtual void Drive() Console.WriteLine(Driving Car); public class Volvo : Car public override void Drive() Console.WriteLine(Driving Volvo ); 以不變應(yīng)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論