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培训、期待与您交流! ----------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值