------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
继承
/*
继承的好处
1. 抽取重复代码
2. 建立了类和类之间的关系
3. 子类拥有父类中得所有成员变量和方法
继承的实现步骤:
1> 先要导入继承的类的头文件
2> 修改类的声明,把父类名改成要继承的那个类的名称
@interface 类名: 父类名
@end
@implementation 类名
@end
注意点:
基本上所有类的根类是NSObject
*/
/*
1. 重写: 子类重新实现父类中得某个方法,覆盖父类以前的做法
2. 注意
1> 父类必须声明在子类的前面
2> 调用某个方法时,优先在当前类中找,如果找不到,就去父类中找
类和类之间的指针是 superclass
3> 子类不能定义和父类同名的实例变量
4> OC中得类是单一继承,一个类只能继承一个父类
5> oc中得类可以支持多层继承
2. 坏处: 耦合性太强
*/
/*
super 关键字
1. 直接调用父类中的某一个方法
2. 如果super处在对象方法中,那么就会调用父类的对象方法
如果super处在类方法中,那么就会调用父类的类方法
3. 使用场合: 子类重写父类的方法时想保留父类的一些行为
*/
/*
继承的使用场合:
1> 当 两个类拥有相同属性和方法 的时候,就可以将相同的东西抽取到一个父类中
2> 当A类完全拥有B类中得部分属性和方法时,可以考虑让B类继承A类
继承是: xx是 xxx
组合: xxx 拥有 xxx
//继承
A
{
int _age;
int _ no;
}
B : A
{
int _weight;
}
//组合:在不适合继承的情况下,就用组合,比如Student 和 Score
A
{
int _age;
int _ no;
}
B
{
A *_a; //组合
int _weight;
}
*/
#import <Foundation/Foundation.h>
#pragma mark Animal类的声明
//Animal 类的声明
@interface Animal : NSObject
{
int _age; //年龄
double _weight;//体重
}
//方法的声明
- (void)setAge:(int)age;
- (int)age;
- (void)setWeight:(double)weight;
- (double)weight;
@end
//Animal类的实现
#pragma mark Animal类的实现
@implementation Animal
- (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的子类 或称为 Dog为派生类 Animal为基类
*/
@interface Dog : Animal
@end
@implementation Dog
@end
//Cat
@interface Cat : Animal
@end
@implementation Cat
@end
int main(int argc, const char * argv[]) {
//创建一个Dog类的对象
Dog *d = [Dog new];
[d setAge:10];
NSLog(@"%d",[d age]);
return 0;
}