——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
继承:
通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类。由已存在的类派生出的新类称为派生类,又称为子类。
1)基类的私有属性能被继承,不能被使用。
2)OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类
3)继承的合理性:
方法的重写,从父类继承的方法,可能这个方法并不适合子类,可以在子类中重写父类的方法。
<span style="font-size:24px;">@interface Dog : NSObject {
int _leg; //腿的个数
int _ear; //耳朵个数
}
-(void)eat;
-(void)run;
@end</span>
Dog作为父类,有两个实例变量和两个对象方法
<span style="font-size:24px;">#import "Dog.h"
@interface Hua : Dog {
}
-(void)eat; //此处可以重写父类的eat的方法
@end</span>
Hua继承自Dog,可以重写父类的方法。
实例练习:
person.h声明:
<span style="font-size:24px;">#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int age;
@property NSString *name;
-(void) speak;
@end</span>
类 Person 属性: _age 、_name 方法: speak
person.m实现:
<span style="font-size:24px;">#import "Person.h"
@implementation Person
-(void) speak{
NSLog(@"人在说");
}
@end</span>
student.h声明:
<span style="font-size:24px;">#import "Person.h"
@interface Student : Person
@property int height;
-(void) playGame;
@end</span>
<span style="font-size:24px;">#import "Student.h"
@implementation Student
-(void) playGmae{
NSLog(@"%@玩游戏",_name);
}
@end</span>
main.m
<span style="font-size:24px;">#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *zgl = [Student new];
zgl.name = @"诸葛亮"; //继承自父类的实例变量
zgl.age = 18; //继承自父类的实例变量
zgl.height = 110; //子类新增的实例变量
[zgl speak];
[zgl playGame];
}
return 0;
}</span>
运行结果: 人在说
诸葛亮玩游戏
重写方法:
<span style="font-size:24px;">#import "Student.h"
@implementation Student
-(void)speak{
NSLog(@"%@在咆哮",_name);
}
-(void) playGmae{
NSLog(@"%@玩游戏",_name);
}
@end</span>
main.m
<span style="font-size:24px;">#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *zgl = [Student new];
zgl.name = @"诸葛亮"; //继承自父类的实例变量
zgl.age = 18; //继承自父类的实例变量
zgl.height = 110; //子类新增的实例变量
[zgl speak]; //此时已经重写了speak方法
[zgl playGame];
}
return 0;
}</span>
运行结果:诸葛亮在咆哮
诸葛亮玩游戏