我是新來的目標c,我從web開發(php)到ios開發邁出了一大步。
爲什麼我應該重寫和實現超類的方法?
這些方法不是已經存在於它們的超類中嗎?
例如,我有一個表視圖控制器。爲什麼不是一個屬性:行數,而不是實現一個方法?
爲什麼我們不實現超類中存在的所有方法?
我想我對對象c中的所有繼承系統缺乏瞭解。爲什麼我們需要重寫方法 - objective c?
感謝
我是新來的目標c,我從web開發(php)到ios開發邁出了一大步。
爲什麼我應該重寫和實現超類的方法?
這些方法不是已經存在於它們的超類中嗎?
例如,我有一個表視圖控制器。爲什麼不是一個屬性:行數,而不是實現一個方法?
爲什麼我們不實現超類中存在的所有方法?
我想我對對象c中的所有繼承系統缺乏瞭解。爲什麼我們需要重寫方法 - objective c?
感謝
在面向對象編程中,方法重寫是一種語言功能,它允許子類或子類提供已由其超類或父類之一提供的方法的特定實現。子類中的實現通過提供與父類中的方法具有相同名稱,相同參數或簽名以及相同返回類型的方法來覆蓋(替換)超類中的實現。執行的方法的版本將由用於調用它的對象決定。如果父類的對象用於調用方法,則會執行父類中的版本,但如果使用子類的對象調用該方法,則將執行子類中的版本。 這是面向對象編程的一個非常強大的方面。 例: ç子類B和B子一
它們都具有相同的梅索德打印 如果你有一個實例名稱改編 的陣列,因爲我在改編{ 打印(I) } 好梅索德打印'將要求每個對象
你說的是壓倒一切的方法,但你用的tableView給的例子未覆蓋的方法。 tableView使用委託模式。在委託模式中,定義了一個協議。我們以UITableView爲例:
定義的協議是UITableviewDataSource。這基本上是一個聲明,像numberOfRowsInSection這樣的方法應該存在於符合這個協議的類中。
當你通過說tableview.dataSource = self告訴tableView你遵守它的UITableViewDataSource協議時,你告訴它你實現了UITableviewDataSource聲明中列出的方法。
此模式爲tableView創建api,而不需要知道提供它的類。從本質上講,tableview將通過已定義的UITableviewDataSource api來詢問您的類的信息。
您可以在委託模式上進行搜索以查找實施它的優缺點。
謝謝,什麼是api?如果我不想使用表視圖數據saurce協議,我應該實現這些方法嗎? – user3764456
這些問題可以通過簡單的Google搜索來解答。 – JAL
重寫方法的概念並不特定於Objective-C。所有OO編程語言都支持此功能。 – rmaddy
所有基於分類的OOP語言。在基於原型的語言中,複製和替換是這個概念。 –