繼承和類設計 oc是一門面向對象的語言,面向對象編程有三大特性:封裝、繼承、多態 一.封裝 【註】封裝就是把某些解決一些問題的代碼進行模塊化,對外部暴露一個介面。我們都稱為封裝了一個方法; 【優點】 1.封裝可以增強代碼的復用度。 2.封裝可以有效提高開發速度。 二.繼承 子類擁有了父類的方法和屬性
==========================
繼承和類設計
==========================
oc是一門面向對象的語言,面向對象編程有三大特性:封裝、繼承、多態
一.封裝
【註】封裝就是把某些解決一些問題的代碼進行模塊化,對外部暴露一個介面。我們都稱為封裝了一個方法;
【優點】
1.封裝可以增強代碼的復用度。
2.封裝可以有效提高開發速度。
二.繼承
子類擁有了父類的方法和屬性的情況,我們稱為繼承;
A:B(讀作:A類繼承B類,也就A類擁有了B類的方法和屬性)
【優點】
1.不用書寫任何代碼,就可以實現某一些功能;
2.可以不用修改父類的方法,對父類進行擴展;
三.多態
多態:類的多種形態
【總結】
多態的方式,可以有效的縮減代碼量
多態多用在具有相同方法名的類中,外部在調用方法之前,並不清楚需要調用哪個類中方法;
四.類別(category)(擴展)
有一些第三方類、咱們程式員以前自己寫的一些類,要用到的時候突然發現如果這個類能有一個xxx方法那就好了,但是又不允許對第三分類或者以前寫的類進行修改。那麼怎麼辦?就可以用到類別(擴展)
1.認識category
#import <Foundation/Foundation.h>
#import "dog.h"
// 使用類別的時候需要先包含頭文件
// 類別一般單獨放到一個類中進行擴展
#import "NSString+print.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString* str = @"hello world hahah";
[str show];
NSLog(@"%@",str);
dog* mydog = [[dog alloc]init];
[mydog test];
}
return 0;
}
#import <Foundation/Foundation.h>
// NSString 就是要擴展的類 ()小括弧內部就是你自己寫的類名
@interface NSString (print)
//這個位置寫需要擴展出來的方法
-(void)show; // 列印當前對象
// 可以擴展成員方法,但是不可以擴展成員變數
// 【註】類別就是為了擴展第三方類或者其它以前自己寫的類方法,但是又不可以對第三方和之前寫的方法進行修改,而存在的;
@end
#import "NSString+print.h"
@implementation NSString (print)
-(void)show
{
//列印當前對象
NSLog(@"%@",self);
}
@end
#import <Foundation/Foundation.h>
@interface dog : NSObject
-(void)test;
@end
#import "dog.h"
#import "NSString+print.h"
@implementation dog
-(void)test
{
NSString* str = @"我是dog class";
[str show];
}
@end
繼承和類別的區別
1.類別是對類的方法進行擴展,不能添加成員變數。但是繼承可以在原有父類的基礎上對方法和成員變數進行擴展。
2.類別隻能添加新的方法,不能修改刪除原類的方法,但是繼承可以增加和修改;
3.類別不提倡對原有方法進行重載,但是繼承可以。
4.類別可以被繼承,如果父類中實現了類別,子類也就存在此類別。
2.認識extension(擴展)也是類別的一種;
【知識擴展】
1.聲明在.h中的方法或者屬性變數,外界可以訪問;
2.聲明在.m中的屬性變數或者方法,只是當前類可以訪問;