main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
#import "COllegeStudent.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//继承
// Person * person = [[Person alloc] init];
// [person sayHi];
// Student * student = [[Student alloc] init];
// [student sayHi];
//
// COllegeStudent * p = [[COllegeStudent alloc]init];
// [p sayHi];
//
// Student * student1 = [[Student alloc] initWithName:@"张三" sex:@"男" age:19 number:10005 score:89];
// [student1 sayHi];
// COllegeStudent * p = [[COllegeStudent alloc] initWithName:@"战神嘎哈" sex:@"男" age:55 number:101111 score:99.99 major:@"计算机" academy:@"计算机世界"];
// [p sayHi];
// COllegeStudent * p1 = [[COllegeStudent alloc] initWithName:@"Tom" sex:@"M" age:19 number:1005];
// [p1 sayHi];
Person * p1 = [Person personWithName:@"张三"];
[p1 sayHi];
// Student * student1 = [[Student alloc] init];
// [student1 setName:@"张三"];
// [student1 setSex:@"男"];
// [student1 setAge:25];
// [student1 setNumber:10001];
// [student1 setScore:88.5];
// [student1 sayHi];
// [student1 study];
// COllegeStudent * collageStudent1 = [[COllegeStudent alloc] init];
// [collageStudent1 setName:@"杨紫"];
// [collageStudent1 setSex:@"女"];
// [collageStudent1 setAge:23];
// [collageStudent1 setNumber:100012];
// [collageStudent1 setScore:99.9];
// [collageStudent1 setMajor:@"表演"];
// [collageStudent1 setAcademy:@"北影"];
// [collageStudent1 sayHi];
// Dog * dog = [[Dog alloc] init];
// [dog call];
//
// [Dog testMnethod];
//
// Cat * cat = [[Cat alloc] init];
// NSLog(@"%@",cat);
// [cat call];
//
// Cat * cat1 =[[Cat alloc] init];
// NSLog(@"%@",cat1);
// [cat1 call];
//
}
return 0;
}
------------Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString * _name;
NSString * _sex;
NSInteger _age;
}
- (void)sayHi;
- (id)init;
//便利构造器
//+ 号方法,返回值是id,方法名一类名打头
//+ (id)personWithName:(NSString *)name;
- (id)initWithName:(NSString *)name;
+ (id)personWithName:(NSString *)name;
- (id)initWithSex:(NSString *)sex;
+ (id)personWithSex:(NSString *)sex;
- (id)initWithName:(NSString *)name
sex:(NSString *)sex;
+ (id)personWithName:(NSString *)name
sex:(NSString *)sex;
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age;
+ (id)personWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age;
- (void)setName:(NSString *)name;
- (NSString *)name;
- (void)setSex:(NSString *)sex;
- (NSString *)sex;
- (void)setAge:(NSInteger)age;
- (NSInteger)age;
@end
----------Person.m
#import "Person.h"
@implementation Person
- (void)sayHi{
NSLog(@"姓名:%@,年龄:%ld,性别%@",_name, _age, _sex);
}
- (id)init{
self = [super init];
if (self) {
_name = @"张志义";
_age = 18;
_sex = @"男";
}
// _name = @"张志义";
// _age = 18;
// _sex = @"男";
return self;
}
- (id)initWithName:(NSString *)name{
// self = [super init];
// if (self) {
// _name = name;
// }
// return self;
return [self initWithName:name sex:nil age:0];
}
//便利构造器
//+ 号方法,返回值是id,方法名一类名打头
+ (id)personWithName:(NSString *)name
{
Person * p = [[Person alloc] initWithName:name];
return p;
}
- (id)initWithSex:(NSString *)sex{
// self = [super init];
// if (self) {
// _sex = sex;
// }
// return self;
return [self initWithName:nil sex:sex age:0];
}
+ (id)personWithSex:(NSString *)sex{
Person * p = [[Person alloc] initWithSex:sex];
return p;
}
- (id)initWithName:(NSString *)name
sex:(NSString *)sex{
// self = [super init];
// if (self) {
// _name = name;
// _sex = sex;
// }
// return self;
return [self initWithName:name sex:sex age:0];
}
+ (id)personWithName:(NSString *)name
sex:(NSString *)sex{
Person * p = [[Person alloc] initWithName:name sex:sex];
return p;
}
//指定初始化方法,无论调用哪个初始化方法,最终调用到的初始化方法,称为是指定初始化方法,一个类只有一个指定初始化方法
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age{
self = [super init];
if (self) {
_name = name;
_sex = sex;
_age = age;
}
return self;
}
+ (id)personWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age{
Person * p = [[Person alloc] initWithName:name sex:sex age:age];
return p;
}
- (void)setName:(NSString *)name{
_name = name;
}
- (NSString *)name{
return _name;
}
- (void)setSex:(NSString *)sex{
_sex = sex;
}
- (NSString *)sex{
return _sex;
}
- (void)setAge:(NSInteger)age{
_age = age;}
- (NSInteger)age{
return _age;
}
@end
---------------------Student.h
#import "Person.h"
@interface Student : Person
{
NSInteger _number;
CGFloat _score;
}
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number;
+ (id)studentWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number;
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number
score:(CGFloat)score;
+ (id)studentWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number
score:(CGFloat)score;
- (void)setNumber:(NSInteger)number;
- (NSInteger)number;
- (void)setScore:(CGFloat)score;
- (CGFloat)score;
- (id)init;
- (void)study;
@end
----------------Student.m
//重写父类方法,调用的时候就会执行子类实现,如果子类没有重写,会逐级向上查找,找到即执行
- (void)sayHi{
NSLog(@"I am a student, name is %@, sex is %@, age is %ld,number is %ld, score is %.2f",_name, _sex, _age, _number, _score);
}
- (id)init{
self = [super init];
if (self) {
_number = 100002;
_score = 86.6;
}
// _name = @"王武";
// _age = 19;
// _sex = @"男";
// _number = 100002;
// _score = 86.6;
return self;
}
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number{
return [self initWithName:name sex:sex age:age number:number score:0];
}
+ (id)studentWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number{
Student * p = [[Student alloc] initWithName:name sex:sex age:age number:number];
return p;
}
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number
score:(CGFloat)score{
// self = [super self];
// if (self) {
// _name = name;
// _sex = sex;
// _age = age;
// _number = number;
// _score = score;
// }
// return self;
self = [super initWithName:name sex:sex age:age];
if (self) {
_number = number;
_score = score;
}
return self;
}
+ (id)studentWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number
score:(CGFloat)score{
Student * p = [[Student alloc] initWithName:name sex:sex age:age number:number score:score];
return p;
}
- (void)study{
NSLog(@"学习");
}
- (void)setNumber:(NSInteger)number{
_number = number;
}
- (NSInteger)number{
return _number;
}
- (void)setScore:(CGFloat)score{
_score = score;
}
- (CGFloat)score{
return _score;
}
@end
------------COllegeStudent.h
#import "Student.h"
@interface COllegeStudent : Student
{
NSString * _major;//专业
NSString * _academy;//学院
}
- (id)initWithName:(NSString *)name
sex:(NSString *)sex;
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number;
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number
score:(CGFloat)score
major:(NSString *)major;
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number
score:(CGFloat)score
major:(NSString *)major
academy:(NSString *)academy;
- (id)init;
- (void)setMajor:(NSString *)major;
- (NSString *)major;
- (void)setAcademy:(NSString *)academy;
- (NSString *)academy;
@end
------------COllegeStudent.m
#import "COllegeStudent.h"
@implementation COllegeStudent
//重写父类方法,调用的时候就会执行子类实现,如果子类没有重写,会逐级向上查找,找到即执行
- (void)sayHi{
NSLog(@"I am a student, name is %@, sex is %@, age is %ld,number is %ld, score is %.2f, major is %@, academy is %@",_name, _sex, _age, _number, _score, _major, _academy);
}
- (id)init{
self = [super init];
if (self) {
_major = @"软件开发";
_academy = @"软件工程";
}
// _name = @"王武";
// _age = 19;
// _sex = @"男";
// _number = 100002;
// _score = 86.6;
// _major = @"软件开发";
// _academy = @"软件工程";
return self;
}
- (id)initWithName:(NSString *)name
sex:(NSString *)sex{
return [self initWithName:name sex:sex age:0 number:0 score:0 major:nil academy:nil];
}
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number{
return [self initWithName:name sex:sex age:age number:number score:0 major:nil academy:nil];
}
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number
score:(CGFloat)score
major:(NSString *)major{
return [self initWithName:name sex:sex age:age number:number score:score major:major academy:nil];
}
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
number:(NSInteger)number
score:(CGFloat)score
major:(NSString *)major
academy:(NSString *)academy{
self = [super initWithName:name sex:sex age:age number:number score:score];
if (self) {
_major = major;
_academy = academy;
}
return self;
}
- (void)setMajor:(NSString *)major{
_major = major;
}
- (NSString *)major{
return _major;
}
- (void)setAcademy:(NSString *)academy{
_academy = academy;
}
- (NSString *)academy{
return _academy;
}
@end