首页 > 代码库 > 黑马程序员—14-oc的继承
黑马程序员—14-oc的继承
一、 继承概念
继承用在类于类之间,子类可以拥有父类所有变量成员和方法。
子类跟父类不能有相同的成员变量,方法实现可以相同
子类重写父类的某个方法,代表着重写
注意点:
1. 父类声明必须写在子类前面
2. 子类不能拥有和父类相同的成员变量
3. 调用某个对象的方法时,优先去当前对象中寻找,如果找不到去父类中寻找
4. 坏处就是耦合性太强,就是两个类之间关系太紧密
二、 继承的使用场合
Ø 当两个类拥有相同属性方法的时候,就可以将相同的东西抽取到一个父类中
Ø 当A类拥有B类中的属性和方法时,就可以考虑让B类,就可以考虑让B类继承A类
u 继承跟组合
继承 xx拥有xxx
组合 xxx拥有xxx
三、 Super的作用
Ø 直接调用父类中的某个方法
Ø Super处在对象方法中,就会调用父类的对象方法,super处在类方法中,那么就会调用父类的类方法
Ø 使用在子类重写父类的方法,想保留父类的某些行为
四、 继承的基本使用
#import<foundationg/foundation.h>
//Animal 的声明
@interface Animal : NSObject
{
int _age ;
double_weight;
}
- (void) setAge : (int) age;
- (int) age;
- (void) setWeight : (double) weight
- (double) weight;
@end
//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
# import<Foundation/Foundation.h>
@interface Dog : Animal
@end
@implementation Dog
@end
//Cat类,继承了Animal
# import<Foundation/Foundation.h>
@interface Cat : Animal
@end
@implementation Cat
@end
int main()
{
Dog* dog = [Dog new] ;
[dog setAge : 10]
Cat* cat = [Cat new];
[cat setWeight: 10];
NSLog(@”age = %d,weight = %d”,[Dog age],[Cat weight]);
return0;
}
输出结果:age = 10 ,weight= 10
上面例子类之间的关系可用下图表示:
五、 组合的基本使用
定义一个成绩类
#import<Foundation/Foundation.h>
@interface Score:NSObject
{
int _ c_Score;
int _ oc_Score;
}
@end
@implementationScore
@end
//定义一个学生
#import<Foundation/Foundation.h>
@interface Person: NSObject
{
Score * _score;
int _ age;
}
@end
@implementationPerson
@end
六、 super的基本使用
#import <Foundation/Foundation.h>
//僵尸(父类)
@interface Zoombie : NSObject
- (void)walk;
+ (void)test;
- (void)test;
@end
@implementation Zoombie
- (void)walk
{
NSLog(@"往前走两步");
}
+ (void)test
{
NSLog("test类方法被调用了");
}
- (void)test
{
NSLog("test对象方法被调用了");
}
@end
//跳跃僵尸(子类)
@interface JumpZoombie : Zoombie
+ (void)test2;
@end
@implementatioon :JumpZoombie
+ (void)test2
{
[supertest];
}
- (void)walk
{
//要求先跳一下
NSLog(@"先跳一下");
//再走两步,使用super调用父类的walk方法
[superwalk];
}
@end
int main()
{
JumpZoobie *jz = [JumpZoobie new];
[jzwalk];
[jztest2];
return0;
}
输出结果:先跳一下
往前走两步
test类方法被调用了
黑马程序员—14-oc的继承