继承,初始化方法

<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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值