lesson3
include是c中导入头文件的指令, #import是oc导入头文件的指令,但是#import可以自动检测是否产生了循环导入,如果有,则自动断开其中一条导入链路,而include本身并不具备这种检测、规避功能。
@class:@class可以解决循环引入后,断开某条链路情况
在声明文件中,使用@class将类名声明出来,并不导入该类 在实现文件中,使用#import导入类的头文件,这样不但可以避免循环导入,而且互相把对方类声明为自己的实例
继承的特性:
1.继承是单向的,不能相互继承,继承也是单点的 子类只有一个父类
2、传递性:子类具备父类的所有实例变量和方法,并且能通过父类继承到父父类的实例变量和方法
用代码实现继承
在类的.h文件中@inteface后的冒号表示继承关系,冒号左边的类继承自冒号右边的类,没有特殊说明 一般是NSObject,所有类最终继承都是继承自该类
创建一个person对象
Person *p = [[Person alloc]initWithPerson:@"张三" withGender:@"男" withAge:25]; [p nslogPerson];
如果子类重写了父类的方法,,那么将会执行子类的方法。
Student *s = [[Student alloc]initWithPerson:@"马军" withGender:@"男" withAge:21];
给子类特有的实例变量赋值
[s setID:@"0021"]; [s setSchoolName:@"蓝鸥"]; [s nslogPerson];
使用nslog方法打印一个对象时,会调用对象的description方法
NSLog(@"%@",s);
@interface Person : NSObject
{
NSString *_name;
NSString *_gender;
int _age;
}
- (void)setName: (NSString *)name;
- (NSString *)name;
- (void)setGender: (NSString *)gender;
- (NSString *)gender;
- (void)setAge: (int)age;
- (int)age;
- (id)initWithPerson: (NSString *)name
withGender: (NSString *)gender
withAge: (int)age;// 自定义初始化
方法 打印所有的实例变量
继承自person类的子类,可以拥有父类的所有非私有的实例变量和方法
- (void)nslogPerson;
// 自定义输出函数
@implementation Person
- (void)setName: (NSString *)name{
_name = name;
}
- (NSString *)name{
return _name;
}
- (void)setGender : (NSString *)gender{
_gender = gender;
}
- (NSString *)gender{
return _gender;
}
- (void)setAge: (int)age{
_age = age;
}
- (int)age{
return _age;
}
- (id)initWithPerson: (NSString *)name withGender: (NSString *)gender withAge: (int)age{
_name = name;
_age = age;
_gender = gender;
return self;
}
- (void)nslogPerson{
NSLog(@"姓名:%@ ,性别:%@ ,年龄:%d",_name,_gender,_age);
}
@interface Student : Person
{
子类可以拥有自己特有的实例变量和方法
NSString *_schoolName;
NSString *_ID;
}
- (void)setSchoolName: (NSString *)schoolName;
- (NSString *) schoolName;
- (void)setID : (NSString * )ID;
- (NSString *)ID;
@implementation Student
重写父类的方法
- (void)nslogPerson{
NSLog(@"客官 你叫%@,你的性别%@,年龄是%d,学校名字:%@,学校ID:%@",_name,_gender,_age,_schoolName,_ID);
}
- (void)setSchoolName: (NSString *)schoolName{
_schoolName = schoolName;
}
- (NSString *) schoolName{
return _schoolName;
}
- (void)setID : (NSString * )ID{
_ID = ID;
}
- (NSString *)ID{
return _ID;
}
description 方法是系统提供的一中描述对象特征的一个实例方法,默认在打印一个对象时,会调用该方法,返回类名+对象地址,我们可以重写这个方法,将若干个实例变量拼接为一个字符串返回,这样就可以打印我们想要的信息
- (NSString *)description{
使用字符串类型,创建一个字符串对象,让后使用格式化初始化方法来将参数拼接进这个字符串的对象中
NSString *string = [[NSString alloc] initWithFormat:@"%@ %@ %@ %d %@",_name,_gender,_schoolName,_age,_ID ]; return string; }
网友评论