OC03 继承、初始化方法、便利构造器-1

//  Person.h


#import <Foundation/Foundation.h>


@interface Person : NSObject

{

    NSString *_name;

    NSString *_gender;

    int _age;

}



//setter

- (void)setName: (NSString *)name;

- (void)setGender: (NSString *)gender;

- (void)setAge: (int)age;


//getter

-(NSString *)name;

-(NSString *)gender;

-(int)age;


// 打印所有的实例变量

- (void)printInformation;



#pragma mark 自定义初始化方法

// 自定义初始化方法

- (id)initWithName: (NSString *)name // ***出错点:泛型!!!-id

              Gender: (NSString *)gender

                 Age: (int)age;




@end




//  Person.m


#import "Person.h"


@implementation Person

//setter/getter

- (void)setName: (NSString *)name{

    _name = name;

    

}

- (void)setGender: (NSString *)gender{

    _gender = gender;

}

- (void)setAge: (int)age{

    _age = age;

    

}



-(NSString *)name{

    return _name;

}

-(NSString *)gender{

    return _gender;

}

-(int)age{

    return _age;

}



// 打印所有的实例变量

- (void)printInformation{

    NSLog(@"姓名:%@,性别:%@ 年龄:%d", _name, _gender, _age);

    

}



#pragma mark 自定义初始化,赋值

// 自定义初始化,赋值

- (id)initWithName: (NSString *)name

              Gender: (NSString *)gender

                 Age: (int)age{

    _name = name;

    _gender = gender;

    _age = age;

    

    return self;

}


@end


//  Student.h

#import "Person.h"


@interface Student : Person

{

    NSString *_schoolName;

    NSString *_ID;

}


setter/getter

- (void)setSchoolName: (NSString *)schoolName;

- (void)setID: (NSString *)ID;


- (NSString *)schoolName;

- (NSString *)ID;



- (void)printInformation;

@end



//  Student.m

#import "Student.h" // 不引入头文件,则无法完成继承。即:继承就得引入头文件。


@implementation Student


#pragma mark 重写父类的方法

// 重写父类的方法

- (void)printInformation{

    NSLog(@"客官,你叫:%@,你的性别:%@,年龄:%d, 学校:%@ ID%@", _name, _gender, _age, _schoolName, _ID);

}




- (void)setSchoolName: (NSString *)schoolName{

    _schoolName = schoolName;

}

- (void)setID: (NSString *)ID{

    _ID = ID;

}



- (NSString *)schoolName

{

    return _schoolName;

}

- (NSString *)ID{

    return _ID;

}



#pragma mark description方法

// description方法是由系统提供的一种描述对象特征的一个实例方法,默认在打印一个对象时,会调用该方法,返回类名+对象地址。我们可以重写这个方法,将若干实例变量拼接为一个字符串返回,这样就可以打印我们想要的信息。


- (NSString *) description{

    // 使用字符串类,创建出一个字符串对象,然后使用格式初始化方法来将参数拼接进这个字符串对象

    NSString *string = [[NSString alloc] initWithFormat:@"嘿,你的名字是:%@,你的性别:%@,年龄:%d, 学校:%@ ID%@", _name, _gender, _age, _schoolName, _ID ];

    return string;

}



@end



//  main.m

#import <Foundation/Foundation.h>

#import "Person.h"// <>引入系统提供的头文件 ""引入自己创建的头文件

#import "Student.h"


int main(int argc, const char * argv[]) {


#pragma mark -继承

    /*

     * 继承的特性:

     * 1、单继承:继承是单向的(不能相互继承)、继承也是单点的(子类只能有一个父类)

     * 2、传递性:子类具备父类的所有实例变量和方法,并且能通过父类继承到父父类的实例变量和方法。

     * 用代码实现继承:

       在类的.h文件中,@interface后的冒号表示继承关系,冒号左边的类继承自冒号右边的类(没有特殊说明,一般是NSObject,所有类最终都继承自该类)

     */

    

    #pragma mark --创建一个Person类的 对象person1

    Person *person1 = [[Person alloc] initWithName:@"张学友" Gender:@"" Age:38];

    [person1 printInformation];

    

    

    

    #pragma mark --创建一个继承自Person类的Student 的对象student1

    // 继承自Person类的子类,可以拥有父类的所有非私有的实例变量和方法

    Student *student1 = [[Student alloc] initWithName:@"爱新觉罗玄烨" Gender:@"" Age:77];

    // 对象调用setter方法修改

    [student1 setSchoolName:@"西安帝国建筑科技大学"];

    [student1 setID:@"110"];

    

    // 如果子类重写了父类的方法(见studet.m),那么将会执行重写的方法.

//    [student1 printInformation];

    

    #pragma mark --调用对象的description方法

    // 使用NSlog直接打印一个对象时,会调用对象的description方法。

    NSLog(@"%@", student1);

    

    

#pragma mark 总结

    /*

     今天学习了继承 的特性:

     

     * 继承的特性:

     * 1、单继承:继承是单向的(不能相互继承)、继承也是单点的(子类只能有一个父类)

     * 2、传递性:子类具备父类的所有实例变量和方法,并且能通过父类继承到父父类的实例变量和方法。

     * 用代码实现继承:

     在类的.h文件中,@interface后的冒号表示继承关系,冒号左边的类继承自冒号右边的类(没有特殊说明,一般是NSObject,所有类最终都继承自该类)

     

     

      以及description方法的使用

     // description方法是由系统提供的一种描述对象特征的一个实例方法,默认在打印一个对象时,会调用该方法,返回类名+对象地址。我们可以重写这个方法,将若干实例变量拼接为一个字符串返回,这样就可以打印我们想要的信息。

     

     - (NSString *) description{

     // 使用字符串类,创建出一个字符串对象,然后使用格式初始化方法来将参数拼接进这个字符串对象

     NSString *string = [[NSString alloc] initWithFormat:@"嘿,你的名字是:%@,你的性别:%@,年龄:%d, 学校:%@ ID%@", _name, _gender, _age, _schoolName, _ID ];

     return string;

     }

     

     

     

     

     */

    

    

    

    

    

    

    

    

    

    

    

    return 0;

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值