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

来源:互联网 发布:网络模拟软件 编辑:程序博客网 时间:2024/06/04 01:01

//  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 = [[NSStringalloc] 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 = [[Personalloc] initWithName:@"张学友"Gender:@""Age:38];

    [person1 printInformation];

    

    

    

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

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

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

    // 对象调用setter方法修改

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

    [student1setID:@"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
原创粉丝点击