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

 

…………………………………………………………………………………………………………………………………………………………….

 

//继承:子类会继承父类所有实例变量以及方法

 //self:  谁调用此方法,self就是谁。

// self: 调用方法,首先在当前类寻找实现,如果有实现,直接调用,如果没有,去父类中寻找实现,找到即执行完毕。

  //super 是编译器指令,不是对象。

 //  super调用方法,直接去父类中寻找实现,执行完父类的实现,再执行子类的实现,完毕。

 //指定初始化方法:

// 一定会调用父类的指定初始化方法

//  一般来说参数最多

 

//便利构造器

//  内部实现即调用了指定初始化方法。

 

// main.m

 

#import<Foundation/Foundation.h>

#import "Person.h"

#import "Student.h"

#import "Car.h"

#import "AudiCar.h"

#import "CollegeStudent.h"

 

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

   @autoreleasepool {

//       Person *person = [[Person alloc]initWithName:@"ylc"gender:@"m" age:20];

//       [personsetName:@"zrt" gender:@"w" age:21];

//       [personsayHi];

//       

//       Student *stu = [[Student alloc]initWithName:@"ee"gender:@"m" age:100 num:2];

//       [stusetName:@"sds" gender:@"fs" age:22];

//       //  如果当前类有重新实现,就是用当前类的重新实现方法,如果没有重新实现,使用父类的方法

//       [stusayHi];

 

CollegeStudent *collegestudent =[[CollegeStudentalloc]initWithName:@"yzz" gender:@"m"age:22 num:1 major:@"electricity"];

       // 向college发送sayHi消息

       [collegestudentsayHi];

 

       // 利用便利构造器发送一个消息

       // 便利构造器是一个 + 方法,因此用类名调用

       // 返回值类型为 Person *,因此用  Person * 型变量接受。

       Person *p = [Person personWithName:@"df" gender:@"f"age:33];

 

 

    }

return 0;

}

 

 

 

// Person.m

#import "Person.h"

@implementation Person

 

// 指定初始化方法: 一般参数最多,而且会调用父类的初始化方法。

- (instancetype)initWithName:(NSString*)name gender:(NSString *)gender age:(int)age{

self = [super init];

if (self) {

//       _name = name;

//       _gender = gender;

//       _age = age;

       [selfsetName:namegender:genderage:age];

    }

return self;

}

 

- (void)setName:(NSString *)namegender:(NSString *)gender age:(int)age{

   _name = name;

   _gender = gender;

   _age = age;

}

 

- (NSString *)name{

return _name;

}

 

- (int)age{

return _age;

}

 

- (NSString *)gender{

return _gender;

}

 

- (void)sayHi{

NSLog(@"%@正在唱小苹果",_name);

}

 

// 便利构造器的实现

+ (Person *)personWithName:(NSString *)namegender:(NSString *)gender age:(int)age{

   Person *p = [[Person alloc]initWithName:namegender:genderage:age];

return p;

 

}

@end

 

 

//  Student.m

#import "Student.h"

 

@implementation Student

 

- (instancetype)initWithName:(NSString*)name gender:(NSString *)gender age:(int)age num:(int)num{

//   _name = name;

//   _gender = gender;

//   _age = age;

//   _num = num;

   //调用父类的初始化方法

self = [super initWithName:namegender:genderage:age];

if (self) {

       _num = num;

    }

return self;

}

 

- (void)sayHi{

   //  这里不能向self发送sayHi消息,会造成递归调用。

   //向父类发送sayHi消息,super不是一个对象。

   [supersayHi];

NSLog(@"%@唱最炫民族风",_name);

}

 

 

@end

 

// CollegeStudent.m

#import "CollegeStudent.h"

 

@implementationCollegeStudent

 

- (instancetype)initWithName:(NSString*)name gender:(NSString *)gender age:(int)age num:(int)num major:(NSString*)major{

//   _name = name;

//   _gender = gender;

//   _age = age;

//   _num = num;

//   _major = major;

self = [superinitWithName:namegender:genderage:agenum:num];

if (self) {

       _major = major;

    }

return self;

}

 

- (void)setMajor:(NSString *)major{

   _major = major;

}

 

- (NSString *)major{

return _major;

}

//子类可以重写⽗类的方法,即:子类既有⾃己的实现,⼜有⽗类继承下来的实现,如果想使用⽗类的实现,向super发送消息。

- (void)sayHi{

     [supersayHi];

NSLog(@"123");

}

@end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值