<span style="font-size:24px;">导入和继承没有什么特殊的关系,继承一定导入了,但是导入却比一定继承
customized init method 自定义初始化方法
一个子类只能有一个父类,一个父类可以有多个子类,单继承,继承具有传递性,子类可以具有父类中除了声明@private的实例变量之外的全部内容
super class 父类
子类 subclass
//坑点
[self eat] 使用self来调用自己的方法
[super eat] 用来调用父类方法的实现
/**
* 继承时的方法会存在三种情况:
1,保留父类对该方法的实现(实现方式,不重写方法)
2,按子类重写之后的方式来实现,(实现方式,重写该方法,写自己的实现体,完成忽视父类的实现)
3,对于该方法即有父类对该方法的实现,也有子类对该方法的实现
*/
//初始化时,本类只对自己独有的实例变量赋值即可
//super 调用父类对该初始化方法的实现,为从父类继承过来的实例变量赋值,self本身是一个指针变量,可以接收地址
self = [super initWithName:name gender:gender age:age];
if (self != nil) {
_number = number;
_score = score;
}
return self;
//便利构造器
/**
作用:快速创建对象,内部封装了创建对象的过程
格式:1, +号方法 2,返回值类型为id类型 3,以类名+With开头,拼接多个参数
*/
+ (id)studentWithName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age number:(NSInteger)number score:(CGFloat)score
{
//创建该类的对象
return [[Student alloc] initWithName:name gender:gender age:age number:number score:score];
}
</span>
<span style="font-size:24px;">/**
坑点
* 文件和类没有直接关系,文件中可以存放多个类,只要符合接口部分以及实现部分的定义格式就可以了;
一般情况下,一个文件就定义一个类,而且文件的名字和类的名字一样,这样就能清晰的知道该文件中的类的名字
类的声明和实现可以在同一个文件中
*/
实例变量依托于对象而存在
类方法不能使用实例变量
//在+号方法中不能使用实例变量,实例变量是依托于对象而存在的,只有有了对象,实例变量才会有空间
//意思:不能识别的类型woman。
//产生原因:#import头文件时,会将头文件中的内容赋值一份,而当使用woman这个类时,该类还未定义,所以识别不了,典型的循环倒入问题
//解决方案:使用该类时不能把它当作一个类来使用,所以在.h文件中使用@class woman;将woman声明为一个字符串,在使用但是它不具备类中的内容;所以要在.m文件中#import"woman.h"倒入头文件
- (id)initWithName:(NSString *)aName sex:(NSString *)aSex age:(NSInteger)aAge
{
_name = aName;
_sex = aSex;
_age = aAge;
//self 谁调用该方法,self就是谁
return self;//(对象或类)
//当方法是一个-号方法时,调用该方法的对象是谁,self就代表当前对象
//当方法是一个+号方法时,调用该方法的类是谁,self就是当前类
}</span>