1. 想要觀察多型是如何執行的,我們先退回去看一般宣告引用和建立物件的方法
dog mydog=new dog();
dog mydog部分是先宣告乙個引用變數,new dog建立物件。重點在於引用型別與物件的型別相符。
但在多型中,引用與物件可以是不同的型別。
anlimal mydog=new dog();
這兩者型別不同。運用多型時,引用型別可以是實際物件型別的父類。
如果將程式**編寫成使用多型引數,可以在執行時傳入任何的子類物件。
2.覆蓋的規則
1)如果你要覆蓋父類的方法時,就要遵守規則。父類方法沒有引數並返回布林值,那麼你覆蓋的方法就必須沒有引數且返回布林值。
2)不能降低方法的訪問許可權。訪問許可權必須相同,或者更加開放。比如,你不可以覆蓋乙個為public的方法並且將它標記為私有。這回讓它以為在編譯期通過是個公有,然後再執行期間被虛擬機器阻止全區。
3.過載
過載的意義是兩個方法的名稱相同,但引數不同。 所以過載與多型毫無關係。
1)返回型別可以不同,但不能只改變返回型別。如果只有返回型別不同,但引數一樣,這是不允許的,編譯器不允許。
2)你可以任意的設定過載方法的許可權。
4.抽象類
我們一定要有父類來產生繼承和產生多型,但是要限制只有它的子類才能被初始化。防止類被初始化有個關鍵字——abstract。使類不能被被new出來,編譯器知道不管在**,這個類不能建立任何型別的例項。
但你還是可以使用抽象類來宣告為引用型別給多型使用。比如:父類 z=new 子類();
抽象類除了被繼承過之外,沒有任何用途,沒有值,沒有目的的。(可以有static的成員)
除了類之外,也可以將方法標記為abstract,抽象的類代表此類,必須要被extend過,抽象方法代表此方法一定要被覆蓋。
如果你宣告出乙個抽象的方法,就必須將類也標記為抽象的,不能在抽象類中擁有抽象方法。即使只有乙個抽象方法,類也必須宣告為抽象的。
抽象的方法沒有內容,只是為了標記出多型而存在。這表示在繼承樹結構下的第乙個具體類就必須要實現出所有的抽象方法。但是你還是可以通過抽象機制將實現的負擔轉給下層,比如說animal與canine都標記為abstratct,那麼canine就無需實現出animal的抽象方法。但具體的類,比如dog就要實現animal和cannie的抽象方法。抽象類可以帶有抽象或者非抽象方法,所以canine也可以實現animal的抽象方法,讓dog不必實現這個部分。
「你不需要實現所有抽象的方法」時,表示你必須寫出內容,以相同的方法鑑名(名稱與引數)和相同的返回型別建立出非抽象的方法。
抽象類 抽象方法
抽象類 1.類名前有abstruct修飾。有構造方法。在建立抽象類的子類的時候,還是會先建立抽象父類的物件的。2.抽象類不能例項化是指不能手動的new。抽象方法 1.抽象方法 沒有方法體且需要用abstruct關鍵字修飾 作用 需要改變的地方都應該是抽象。抽象方法只能存在於抽象類或介面中。2.有抽象...
抽象類,抽象方法
1 抽象類中可以有實現的方法。抽象方法必須在抽象類中。using system using system.collections.generic using system.linq using system.text namespace test 抽象類可以包含抽象屬性 public int age...
抽象類 抽象方法
抽象方法 使用 abstract修飾的方法,只有方法的宣告 沒有方法體 定義的是一種 規範 就是告訴子類必須要給抽象方法提供具體的實現 抽象類 包含抽象方法的類就是抽象類 通過abstract方法定義規範 然後要求子類必須定義具體實現 通過抽象類 我們就可以做到嚴格限制子類的設計 使子類之間更加通用...