類別
- 類別:類別是對(duì)一個(gè)功能完備的類的一種補(bǔ)充,就像是一個(gè)東西的主要基本功能都完成了,可以用類別為這個(gè)類添加不同的組件,使得這個(gè)類能夠適應(yīng)不同情況的需求。比如animal這個(gè)類,具有eat和run等方法,想給這個(gè)類添加一個(gè)bark的方法,可以用類別。
假設(shè)你接到一個(gè)大項(xiàng)目:計(jì)算兩個(gè)整數(shù)的和,差。
#import <Foundation/Foundation>
@interface Calculate :NSObject
@property int number1,number2;
- (int) sumNumber1:(int)num1 andNumber2: (int)num2;//加法
- (int) subNumber1:(int)num1 andNumber2: (int)num2; //減法
- (void)print;
@end
幾天后,客戶需求發(fā)生變化,不僅需要加法,減法功能,還要能做到乘除。我們的做法一般是直接在Calculate類中添加乘,除的方法。當(dāng)然在這里是沒有任何問題的。但是在現(xiàn)實(shí)的項(xiàng)目中,代碼量十分巨大,以及業(yè)務(wù)邏輯相當(dāng)復(fù)雜的情況下,直接修改之前源代碼是冒有很大的風(fēng)險(xiǎn)的!我們現(xiàn)在可以利用分類解決這個(gè)問題
#import <Foundation/Foundation>
#import”Calculate”//既然是對(duì)原有類的接口的擴(kuò)展,所以必須包括原始接口
@interface Calculate(MulAndDiv)//告訴編譯器這是為Calculate定義的分類名為MulAndDiv
- (int) MulNumber1:(int)num1 andNumber2: (int)num2;//乘法
- (int) DivNumber1:(int)num1 andNumber2: (int)num2; //除法
@end
繼承
- 繼承:多個(gè)類具有相同的實(shí)例變量和方法時(shí),考慮用繼承。即子類可以繼承父類的相同特性。如animal具有年齡和體重兩個(gè)屬性,dog也具有年齡和體重兩 個(gè)屬性,dog可以繼承animal的這兩個(gè)屬性,即為繼承。
- 共同點(diǎn):都是給一個(gè)類進(jìn)行擴(kuò)展
- 區(qū)別:
- 1.類別是對(duì)方法的擴(kuò)展,不能添加成員變量。繼承可以在原來父類的成員變量的基礎(chǔ)上,添加新的成員變量
- 2.類別只能添加新的方法,不能修改和刪除原來的方法。繼承可以增加、修改和刪除方法。
- 3.類別不提倡對(duì)原有的方法進(jìn)行重載。繼承可以通過使用super對(duì)原來方法進(jìn)行重載。
- 4.類別可以被繼承,如果一個(gè)父類中定義了類別,那么其子類中也會(huì)繼承此類別。