OC基礎—三大特性之繼承

------ android培訓java培訓、期待與您交流! ----------


                                                                       OC基礎—三大特性之繼承

三大特性之繼承:用於類與類之間,繼承某個類就擁有了這了類的所有成員變量和方法

例子:

#import <Foundation/Foundation.h>

// ***********Animal類聲明*************
@interface Animal : NSObject
{
    int _age;
    double _weight;
}
// set與get方法
- (void)setAge:(int)age;
- (int)age;
- (void)setWeight:(double)weight;
- (double)weight;
@end
// ***********Animal類實現*************
@implementation Animal
// set與get方法聲明
- (void)setAge:(int)age
{
    _age = age;
}
- (int)age
{
    return _age;
}
- (void)setWeight:(double)weight
{
    _weight = weight;
}
- (double)weight
{
    return _weight;
}
@end
// *************dog類聲明***************
// 這裏:Animal就是代表繼承Animal,這裏: 就是繼承的意思,相當於擁有了Animal裏面的所有成員變量和方法
// Animal成爲Dog的父類,Dog成爲Animal的子類
@interface Dog : Animal

@end
// *************dog類實現***************
@implementation Dog

@end

int main( )
{
    Dog *d = [Dog new];
    [d setAge:10];
    NSLog(@"狗的年齡是%d", [d age]);
    return 0;
}
這裏Dog類就是繼承了Animal類,雖然Dog類中沒有寫變量和方法,但是繼承了Animal類就可以使用這個類中的所有成員變量和方法。

繼承的好處:

1. 抽取相同的代碼

2. 建立了類之間的關係

繼承的特點:子類可以擁有父類中所有的成員變量和方法。

注意!:基本上所有類的根類是NSObject


繼承的注意點:

1. 父類必須聲明在子類的前面(只關注聲明)

2. 子類不能擁有和父類相同的成員變量

3. 調用某個對象的方法時,優先在當前對象中找,如果找不到就去父類中找。(每個對象中都有一個isa指針指向類,每個類裏也有個指針superclass指向父類)

繼承缺點:類之間的耦合性太強(兩個類之間的關係太強,當某個類改變,另一個類以無法使用)。

例子:

#import <Foundation/Foundation.h>

// ********Person**********
@interface Person : NSObject
{
    int _age;
}
- (void)setAge:(int)age;
- (int)age;

- (void)run;
@end
@implementation Person
- (void)setAge:(int)age
{
    _age = age;
}
- (int)age
{
    return _age;
}
- (void)run
{
    NSLog(@"Person跑起來了");
}
@end

// *******Student**********
@interface Student : Person
{
    int _no;
    // 不允許子類和父類擁有相同變量的成員變量
    //int _age;
}
- (void)run;
@end
@implementation Student
// 重寫:子類重新實現父類中的某個方法
// 好處:覆蓋父類以前的做法
- (void)run
{
    NSLog(@"Student跑起來了");
}
@end

int main( )
{
    Student *s = [Student new];
    // 這裏調用run方法時,會先去Student中去找,如果找不到就去父類中找,再找不到就去上一級中找
    [s run];   
    return 0;
}
重寫:子類重新實現父類中的某個方法。  好處:覆蓋父類以前的做法


繼承的適用場合:

1. 當兩個類擁有相同屬性和方法的時候,就可以將相同的東西抽取出來放到一個父類中

2. 當A類完全擁有B類中的部分屬性和方法時,可以考慮讓B類繼承A類


super關鍵字:

舉一個植物大戰殭屍例子(殭屍:跳躍殭屍,舞王殭屍,鐵桶殭屍)

#import <Foundation/Foundation.h>

// ***********殭屍**************
@interface Zoombie : NSObject
- (void)walk;
+ (void)test;
- (void)test;
@end

@implementation Zoombie
+ (void)test
{
    NSLog(@"Zoombie+test");
}
- (void)test
{
    NSLog(@"Zoombie-test");
}
- (void)walk
{
    NSLog(@"往前走兩步");
}
@end
// ***********跳躍殭屍***********
@interface JumpZoobie : Zoombie
+ (void)haha;
@end

@implementation JumpZoobie
// 跳也是走的一種方式,所以重寫父類的walk方法
- (void)walk
{
    NSLog(@"往前跳一下");
    //NSLog(@"往前走兩步");
    [super walk]; // 調用父類的walk方法
}
+ (void)haha
{
    // 調用父類的+test方法,因爲haha是一個類方法,所以這裏的super調用的是父類中的類方法+test
    [super test];
}
@end
int main( )
{
    JumpZoobie *jz = [JumpZoobie new];
    [jz walk];
    
    [JumpZoobie haha];
    return 0;
}

super的作用:

1. 直接調用父類中的某個方法

2. 如果super處在對象方法中,那麼就調用父類中的對象方法

3. 如果super處在類方法中,那麼就調用父類中的類方法


------ android培訓java培訓、期待與您交流! ----------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章