您的位置:首页 > 移动开发 > Objective-C

【Objective-C】07-OC对象的继承

2014-12-13 11:08 295 查看
1、继承的好处:

1.1 继承可以抽取重复的代码,减少代码量,提高代码的利用性

1.2 面向对象的多态就是基于继承

1.3 继承建立了类与类之间的关系

1.4 子类可以拥有父类中的所有成员变量和方法

1.5 当子类想要拥有和父类同名但是不一样的实现方式时,可以重写父类的方法,提高代码的灵活性

2、继承的声明

2.1 声明和实现父类方法 :@interface
Animal:NSObject @end

2.2 声明子类,并在声明子类后面继承父类:@interface Dog:Animal @end

3、方法的重写

3.1 子类重新实现父类的某个方法,覆盖父类以前的做法

3.2 父类必须声明在子类的前面

3.3 子类不能拥有和父类相同的成员变量

3.4 调用某个方法时,优先在当前类中找;如果找不到,再到父类中找

4、继承的坏处

4.1 类与类之前的偶合性太强

5、继承的使用场合(继承与组合)

5.1 继承表示的是A类属于B类,即A:B,或者A is B。当A是B的子集时,可以采用继承的方式。比如狗是动物的一种,Dog is Animal,即可声明为@interface Dog:Animal

5.2 当A类不是B类的子集时,但是B类又需要拥有A类的部分属性或方法,这时可以考虑使用组合的方式。组合表示的是B类拥有A类,即B has A。如学生类拥有成绩类,即可用组合的方式。具体做法为声明成绩类和学生类。在学生类中声明一个成绩类的成员变量,即表示学生类拥有成绩类了。

#import <Foundation/Foundation.h>
@interface Animal:NSObject
{
int _age;//年龄
double _weight;//重量
}
- (void)setAge:(int)age;
- (int)age;

- (void)setWeight:(double)weight;
- (double)weight;
//对象方法:跑
- (void)run;
//类方法:test
+ (void)test;

@end
//Animal类的实现
@implementation Animal

- (void)setAge:(int)age
{
_age=age;
}
- (int)age
{
return _age;
}

- (void)setWeight:(double)weight
{
_weight=weight;
}
- (double)weight
{
return _weight;
}

- (void)run
{
NSLog(@"Animal---跑");
}

+ (void)test
{
NSLog(@"Animal---+test");
}

@end

@interface Dog : Animal
//子类不能拥有和父类相同名称的成员变量
//int _age;
- (void)run;
+ (void)test2;
@end

@implementation Dog
//重写父类方法:子类重新实现父类中的某个方法,覆盖父类以前的方法
- (void)run
{
NSLog(@"dog's running");
}
/*
//如果这一段没有注释的话,则下面的test2方法调用的是当前的test方法
+ (void)test
{
NSLog(@"dog-----+test");
}
*/
+ (void)test2
{
//调用当前类的类方法,如果没有则到父类中查找test类方法
[self test];
}
@end

@interface Cat:Animal

@end

@implementation Cat

@end

int main()
{
Dog *d= [Dog new];
[d setAge:10];
NSLog(@"dog's age=%d",[d age]);
//调用对象方法run
[d run];
//调用类方法test2
[Dog test2];
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: