過載、重寫和重構在之前就學習過,但到現在仍然不能準確的說出它們到底有什麼區別,該怎麼具體的應用,看來真是書到用時方恨少,這種狀況是不是特別嚴重?真的該總結回顧了。
子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫(重寫的
方法和父類的方法名稱一定要相同,引數的型別、個數也要相同
)。方法重寫又稱方法覆蓋。
1、必須在繼承裡(基類中的方法用virtual關鍵字來標識,然後在繼承類中對該類進行重寫(override),這樣基類中的方法已經被重寫了,已經失去了功能)。
2、重寫方法的引數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是過載。
3、重寫的方法的返回值必須和被重寫的方法的返回一致;
4、重寫方法的訪問修飾符一定要大於被重寫方法的訪問修飾符(public>protected>default>private)。
5、重寫的方法所丟擲的異常必須和被重寫方法的所丟擲的異常一致,或者是其子類;
6、被重寫的方法不能為private,否則在其子類中只是新定義了乙個方法,並沒有對其進行重寫。
7、靜態方法不能被重寫為非靜態的方法。
public class baseclass
public virtual void functionb()
}public class derivedclass:baseclass
public override void functionb()
}
執行:
baseclass basefunction=new derivedclass();
basefunction.functiona();
basefunction.functionb();
執行結果:
basefunctiona
derivedfunctionb
簡單說,過載就是函式或者方法有同樣的名稱,但是引數列表不相同,這樣的同名不同引數的函式或者方法之間,互相稱之為過載函式或者方法(發生在同一類中,方法名相同,引數列表()不同)
。傳遞不同的引數實現相同的效果。
過載函式通常用來命名一組功能相似的函式,這樣做減少了函式名的數量,避免了名字空間的汙染,對於程式的可讀性有很大的好處。
1、在使用過載時只能通過相同的方法名、不同的引數形式實現。不同的引數型別可以是不同的參
型別,不同的引數個數,不同的引數順序(引數型別必須不一樣);
2、不能通過訪問許可權、返回型別、丟擲的異常進行過載;
3、方法的異常型別和數目不會對過載造成影響;
(借鑑)
class student
}class leader
}class sayhello
void greeting(leader lea) //領導打招呼的方式 }
重構(refactoring)就是通過調整程式**改善軟體的質量、效能,使其程式的設計模式和架構更趨合理,提高軟體的擴充套件性和維護性。
重寫和過載有它們易混淆的地方,多多比較和分析會更好的掌握理解,至於重構儘管帶著「重」字,其實也和過載、重寫就沒什麼關係了,簡單了解吧。
隨筆 02(關於重構過載和重寫)
重構 refactoring 就是通過調整程式 改善軟體的質量 效能,使其程式的設計模式和架構更趨合理,提高軟體的擴充套件性和維護性,系統發展到一定階段後,使用重構的方式,不改變系統的外部功能,只對內部的結構進行重新的整理。通過重構,不斷的調整系統的結構,使系統對於需求的變更始終具有較強的適應能力。...
重構,重寫(覆蓋)與過載
重構負責重新設計類的體系以便將操作和 或資料從乙個類移動到另乙個類中。3.過載 注意,定義派生類中的函式不會過載其基類中的成員。如果派生類 內層作用域 的成員與基類 外層作用域 的某個成員同名,則派生類將在其作用域內隱藏該基類成員。即使兩者的形參列表不一樣。include include inclu...
C 重構 過載 重寫
來,我們問一下自己 建構函式是幹什麼的?重構是什麼?重寫是什麼?過載是什麼?重寫和過載聯絡的是什麼?重構與過載的區別是什麼?重寫和重構又是什麼關係?它們分別怎麼用?重構是重新構什麼?重寫又是在重寫什麼?過載載的又是什麼?哈哈,撒了吧 建構函式 是一種特殊的方法。主要是用來在建立物件的時初始化物件,即...