封裝 繼承 多型

2021-09-08 12:16:36 字數 4963 閱讀 4376

封裝:隱藏內部(定義類、定義屬性、定義方法。)

實現,穩定外部介面。

@propert和@synthesize

#import 「car.h」

#import @inte***ce car : nsobject

@property int wheels,speed;

- (void) print;

@end

@property int wheels,speed;

- (void) setwheels:(int) wheels

- (int)wheels

- (void) setspeed:(int) speed

- (int)speed

@synthesize實現類的settergetter方法。**如下。(在現在的xcode中,可以省略,但不建議這樣操作。)

#import "car.h」

@implementation car

@synthesize wheels =_wheels ,speed = _speed;

- (void) print

@end

@synthesize wheels =_wheels ,speed = _speed;**必須寫@implementation和@end之間,此**的的意思是將@property wheels,speed,進行實現,而wheels =_wheels ,speed = _speed是將訪問方法實現裡面_wheels和_speed的成員變數並進行給賦值。

#import "car.h"

#import int main(int argc, const char * ar**)

多型

抽象的印表機類printer

printer.h

#import

@inte***ce printer : nsobject

- (void) print;

@end

就是乙個簡單的方法print

printer.m

#import "printer.h"

@implementation printer

- (void)print

@end

實現也是很簡單的

下面來看一下具體的子類

colorprinter.h

#import "printer.h"

//修改父類的列印行為

@inte***ce colorprinter : printer

- (void)print;

@end

colorprinter.m

#import "colorprinter.h"

@implementation colorprinter

- (void)print

@end

在看一下另外乙個子類

blackprinter.h

blackprinter.m

#import "blackprinter.h"

@implementation blackprinter

- (void)print

@end

這裡我們在定義乙個person類,用來操作具體的印表機

person.h

person.m

#import "person.h"

@implementation person

/*

- (void) printwithcolor:(colorprinter *)colorprint

- (void) printwithblack:(blackprinter *)blackprint

*/

- (void) doprint:(printer *)printer

@end

再來看一下測試**:

main.m

//  main.m  

#import

#import "person.h"

#import "blackprinter.h"

#import "colorprinter.h"

int main(int argc, const charchar * ar**)elseif(cmd == 2)

}while(1);

}

return0;

}

下面就來詳細講解一下多型的好處

上面的例子是乙個彩色印表機和黑白印表機這兩種印表機,然後person類中有乙個操作列印的方法,當然這個方法是需要印表機物件的,如果不用多型機制實現的話(person.h中注釋的**部分),就是給兩種印表機單獨定義個操作的方法,然後在person.m(**中注釋的部分)中用具體的印表機物件進行操作,在main.m檔案中,我們看到,當person需要使用哪個印表機的時候,就去呼叫指定的方法:

1

2

[person printwithblack:blackprint];//呼叫黑白印表機

[person printwithcolor:colorprint];//呼叫彩色印表機

這種設計就不好了,為什麼呢?假如現在又有一種印表機,那麼我們還需要在person.h中定義一種操作這種印表機的方法,那麼後續如果在新增新的印表機呢?還在新增方法嗎?那麼person.**件就會變得很臃腫。所以這時候多型就體現到好處了,使用父類型別,在person.h中定義乙個方法就可以了:

1

- (void) doprint:(printer *)printer;

這裡看到了,這個方法的引數型別就是父類的型別,這就是多型,定義型別為父類型別,實際型別為子類型別

1

2

3

- (void) doprint:(printer *)printer

這裡呼叫print方法,就是傳遞進來的實際型別的print方法。

1

2

3

4

5

printer *p1 = [[colorprinter alloc] init];

printer *p2 = [[blackprinter alloc] init];

[person doprint:p1];

[person doprint:p2];

封裝,繼承,多型

一 1 封裝 該隱藏隱藏,該公開的公開 屬性隱藏,同時提供get set方法 有些方法應該隱藏 方法宣告公開,實現隱藏。實現的改變對架構的影響最小 2 繼承 一般 特殊 單繼承 乙個類最多只能有乙個直接父類。類之間可以形成樹狀關係 根據訪問許可權,子類如果可以訪問父類的屬性和方法,就能繼承 priv...

繼承 封裝 多型

一 封裝 封裝是實現物件導向程式設計的第一步,封裝就是將資料或函式等集合在乙個個的單元中 我們稱之為類 被封裝的物件通常被稱為抽象資料型別。封裝的意義 封裝的意義在於保護或者防止 資料 被我們無意中破壞。在物件導向程式設計中資料被看作是乙個中心的元素並且和使用它的函式結合的很密切,從而保護它不被其它...

封裝 繼承 多型

一 封裝 封裝是實現物件導向程式設計的第一步,封裝就是將資料或函式等集合在乙個個的單元中 我們稱之為類 被封裝的物件通常被稱為抽象資料型別。封裝的意義 封裝的意義在於保護或者防止 資料 被我們無意中破壞。在物件導向程式設計中資料被看作是乙個中心的元素並且和使用它的函式結合的很密切,從而保護它不被其它...