OC语言day04-12自定义构造方法在继承中的表现

pragma mark 自定义构造方法在继承中的表现

pragma mark 概念

pragma mark 代码

#import <Foundation/Foundation.h>
#pragma mark 类
#import "Student.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
    
    Student *s = [[Student alloc]initWithAge:13 andName:@"lyt" andNo:1];
    NSLog(@"%@",s);
    return 0;
}

Person.h //人类
#import <Foundation/Foundation.h>

@interface Person : NSObject

@property int age;
@property NSString *name;
/*
 自定义构造方法:
 其实就是自定义一个init方法
 1. 一定是对象方法
 2. 一定返回id/instancetype
 3. 方法名称 一定以init开头
 */
#warning 自定义构造方法
- (instancetype)initWithAge:(int)age;

// 一个类可以有0个 或者 多个自定义构造方法
- (instancetype)initWithName:(NSString *)name;

// 自定义构造方法 可以有1个或多个参数
- (instancetype)initWithAge:(int)age andName:(NSString *)name;

@end
Person.m
#import "Person.h"

@implementation Person

- (instancetype)init
{
    if (self = [super init]) {
        _age = 5;
    }
    return self;
}
#warning 自定义构造方法
- (instancetype)initWithAge:(int)age
{
    if (self = [super init]) {
        _age = age;
    }
    return self;
}

- (instancetype)initWithName:(NSString *)name
{
    if (self = [super init]) {
        _name = name;
    }
    return self;
}
- (instancetype)initWithAge:(int)age andName:(NSString *)name
{
    if (self = [super init]) {
        _age = age;
        _name = name;
    }
    return self;
}
#warning 重写(description)描述方法
- (NSString *)description
{
    return [NSString stringWithFormat:@"age = %i, name = %@",_age,_name];
}
@end


Studnet.h //学生类 (人类的子类)
#import "Person.h"

@interface Student : Person

@property int no; // 学号

- (instancetype)initWithAge:(int)age andName:(NSString *)name andNo:(int)no;

@end
Studnet.m
#import "Student.h"

@implementation Student
- (instancetype)initWithAge:(int)age andName:(NSString *)name andNo:(int)no
{
    /*
    if (self = [super init]) {
//        _age = age;
        
        //  多管闲事(狗拿耗子)
        // 自己的事情 自己做
        [self setAge:age];
        [self setName:name];
    }
     */
    
    if (self = [super initWithAge:age andName:name]) {
        _no = no;
    }
    
    return self;
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"age = %i, name = %@, no = %i",[self age],[self name],_no];  // 因为在子类不能直接访问父类的成员变量,所以只能通过get方法
}
@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容