重写,重载,抽象类,接口,抽象类和接口区别
1.多態之重寫,重載
?? ?重寫:當一個子類繼承一父類,而子類中的方法與父類中的方法的名稱,參數個數、類型都完全一致時,就稱子類中的這個方法重寫了父類中的方法。
?? ?new,virtual,override
virtual方式:
?? ??? ??? ?父類使用virtual關鍵字修飾方法? public virtual void sleep(){},
?? ??? ??? ?子類使用override關鍵字修飾方法 public override void sleep(){}
?? ??? ??? ?特定場合:Person p = new Student()時,p.sleep()調用的時子類方法(非常靈活)
?? ?重載:一個類中的方法與另一個方法同名,但是參數個數或參數類型不同,這種方法稱之為重載方法。
2.密封修飾符:sealed
?? ?類: public sealed class A? 該類不能作為父類出現,不能被繼承,類中的方法不能定義為virtual方法
?? ?方法: public sealed override void aaa(){}? sealed修飾方法的時候,通常和override配合使用,表明該方法不能再被重寫
3.抽象類
?? ?作用:提供一個可供多個子類共享的通用基類定義,它是一個特殊的類繼承關系,它可以包含一個抽象方法,所有派生子類必須重寫實現
?? ?案例:Person類,Student類,Teacher類
?? ??? ?a. abstract public class Person類中提供抽象abstract public void eat();
?? ??? ?b. 抽象類中的抽象方法無需直接實現;
?? ??? ?c. 子類使用override重寫實現抽象方法
?? ?案例:鯽魚,鯉魚,Fish類 抽象類Fish類實現抽象方法 子類重寫實現
抽象方法:
使用abstract關鍵字 public abstract bool Withdraw(…);
抽象方法是必須被派生類覆寫的方法。
抽象方法是可以看成是沒有實現體的虛方法
如果類中包含抽象方法,那么類就必須定義為抽象類,不論是否還包含其它一般方法
虛方法:
使用virtual關鍵字 public virtual bool Withdraw(…);
調用虛方法,運行時將確定調用對象是什么類的實例,并調用適當的覆寫的方法。
虛方法可以有實現體 若一個實例方法的聲明中含有 virtual 修飾符,則稱該方法為虛擬方法;
一個虛擬方法的實現可以由派生類取代。取代所繼承的虛擬方法的實現的過程稱為重寫該方法;
在一個虛擬方法調用中,該調用所涉及的那個實例的運行時類型確定了要被調用的究竟是該方法的哪一個實現。
?? ?抽象方法和虛方法的區別:
抽象方法是只有定義、沒有實際方法體的函數,它只能在抽象函數中出現,并且在子類中必須重寫;
虛方法則有自己的函數體,已經提供了函數實現,但是允許在子類中重寫或覆蓋。
?? ??? ?父類中的抽象方法不包含方法體,子類必須重寫;
?? ??? ?而虛方法必須要有方法體,子類可以不重寫?? ?
?? ?抽象類不能夠被直接實例化, 只能通過抽象類實例化它的子類?? ??? ?
4.接口
?? ?作用:接口可以實現多繼承,一個類只能繼承一個父類,但可以實現多個接口,接口也是抽象的體現,適合為不相關的類提供通用功能
?? ?案例:人Human、魚Fish、青蛙Frog
?? ??? ?a.定義接口及方法 interface ISwim { void swim(); }
?? ??? ?b.給不相干的事物提供一個公共的方法,一個約定
?? ??? ?c.實現類需要使用:實現接口,并必須實現接口中的方法
?? ??? ?d.封裝一個接口調用類,專門負責調用接口實現類中的方法(各司其值)
?? ??? ??? ?public void runMethod(ISwim iswim) { iswim.swim(); }
?? ??? ??? ?Test t = new Test();
?????????? ??? ??? ?ISwim isw;
?? ??? ??? ?isw = new Human();
?? ??? ???????? t.runMethod(isw);
?? ?總結: 把實現接口的Class類封裝成一個組件,那么當我們的用戶需要擴充功能的時候,我們只需要在外部做很小的修改就能實現,
?? ?根本就用不著改動我們已經封裝好的組件
?? ?c#中的系統接口, 舉例:使用Person對象類型無法直接進行排序(報錯),需要添加IComparable<Person>接口實現CompareTo()方法?? ?
5.抽象類和接口區別
?? ?抽象類:?? ?共性大于個性,共性相同的個體間必然具有相同的屬性與行為,相同行為的實現方式具有一定區別(繼承,重寫)
?? ?接口: ?? ?個性大于共性,差異較大的個性間具有某些相同的行為,相同行為的實現方式有較大區別。
?? ?案例:
?? ??? ?接口: Animal接口, Dog類,Cat類,Tortoise類
?? ??? ?????? void active();? //行為方法,描述各種動物的特性
?? ??? ?抽象類: 抽象方法active();??? ????
???
轉載于:https://www.cnblogs.com/zeng-qh/p/10251426.html
總結
以上是生活随笔為你收集整理的重写,重载,抽象类,接口,抽象类和接口区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS修仙之一界本源
- 下一篇: 1.为什么使用spring boot