首先什么是重寫與重載悔政?
一晚吞、重寫(override)
override是重寫(覆蓋)了一個方法,以實(shí)現(xiàn)不同的功能谋国。一般是用于子類在繼承父類時槽地,重寫(重新實(shí)現(xiàn))父類中的方法。
重寫(覆蓋)的規(guī)則:
1芦瘾、重寫方法的參數(shù)列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是重載.
2捌蚊、重寫方法的訪問修飾符一定要大于被重寫方法的訪問修飾符(public>protected>default>private)。
3近弟、重寫的方法的返回值必須和被重寫的方法的返回一致缅糟;
4、重寫的方法所拋出的異常必須和被重寫方法的所拋出的異常一致祷愉,或者是其子類窗宦;
5赦颇、被重寫的方法不能為private,否則在其子類中只是新定義了一個方法赴涵,并沒s有對其進(jìn)行重寫媒怯。
6、靜態(tài)方法不能被重寫為非靜態(tài)的方法(會編譯出錯)髓窜。
二扇苞、overload是重載,一般是用于在一個類內(nèi)實(shí)現(xiàn)若干重載的方法寄纵,這些方法的名稱相同而參數(shù)形式不同杨拐。
重載的規(guī)則:
1、在使用重載時只能通過相同的方法名擂啥、不同的參數(shù)形式實(shí)現(xiàn)哄陶。不同的參數(shù)類型可以是不同的參數(shù)類型,不同的參數(shù)個數(shù)哺壶,不同的參數(shù)順序(參數(shù)類型必須不一樣)屋吨;
2、不能通過訪問權(quán)限山宾、返回類型至扰、拋出的異常進(jìn)行重載;
3资锰、方法的異常類型和數(shù)目不會對重載造成影響敢课;
多態(tài)的概念比較復(fù)雜,有多種意義的多態(tài)绷杜,一個有趣但不嚴(yán)謹(jǐn)?shù)恼f法是:繼承是子類使用父類的方法直秆,而多態(tài)則是父類使用子類的方法。
一般鞭盟,我們使用多態(tài)是為了避免在父類里大量重載引起代碼臃腫且難于維護(hù)圾结。
新建類
//繼承于NSObject 若不繼承則默認(rèn)新建為基類
class Person:NSObject{
var name: String;//指定屬性類型
override init() {//重寫
self.name = "defaultValue";
print("overribe");
super.init();
}
init(nam:String) {//重載
name = nam;
super.init();
}
}
class man :Person {
override init(nam:String) {//重寫
super.init(nam:nam);
print("name = \(nam) code line = \(#line)");
}
}
調(diào)用打印
var liuyonghu = Person(nam:"劉勇虎") ;
var anotherPerson = man(nam:"0.0");
print(liuyonghu.name);
var person1 = Person();
結(jié)果為
2.在定義函數(shù)或者方法時應(yīng)注意內(nèi)(局)部/外部 參數(shù)的定義,使代碼語義更加明確
//有外部參數(shù)
class Person {
var name :String;
init(name a:String) {
self.name = a;
}
}
class Person {
var name :String;
//沒有外部參數(shù)
init(name :String) {
self.name = name;
}
}
最后編輯于 :2017.12.10 09:45:45
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者