OC学习笔记 自定义构造方法扩展

将子类父类方法初始化

父类定义

#import <Foundation/Foundation.h>

@interface Person :NSObject
@property NSString *name;
@property int age;
- (id)initWithAge :(NSString *)name andAge:(int) age;

@end

父类实现

#import "Person.h"

@implementation Person : NSObject
- (id)initWithAge:(NSString *)name andAge:(int)age
{
    if(self = [super init])
    {
        _name = name;
        _age = age;
    }
    return self;
}
@end

子类定义

#import "Person.h"

@interface Student :Person
@property double no;
- (id)initWithNo :(NSString *)name andAge :(int)age andNo :(double)no;
@end

子类实现

#import "Student.h"

@implementation Student : Person
// 父类的属性交给父类方法去处理,子类属性交给子类方法去处理
- (id)initWithNo:(NSString *)name andAge:(int)age andNo:(double)no
{
    if(self = [super initWithAge:name andAge:age]) // 将继承父类属性age name传递到父类去初始化
    {
        _no = no; // 只关注并返回子类自己独有属性 自己搞自己东西
    }
    return self;
}
@end

main

 1 #import "Person.h"
 2 #import "Student.h"
 3 
 4 int main() {
 5   Person *p = [[Person alloc]initWithAge:@"大杰加油 上海我来了" andAge:28 ];
 6     NSLog(@"%@%d",p.name,p.age);
 7     Student *stu = [[Student alloc]initWithNo:@"一刻都不敢听曲,一刻都不敢看声色犬马,一刻都不停止努力" andAge:28 andNo:2015.0424 ];
 8     NSLog(@"%@%d%.4f",stu.name,stu.age,stu.no);
 9     return 0;
10 }

打印输出:

2015-04-24 10:32:09.402 构造函数[716:33731] 大杰加油 上海我来了28
2015-04-24 10:32:09.405 构造函数[716:33731] 一刻都不敢听曲,一刻都不敢看声色犬马,一刻都不停止努力282015.0424
Program ended with exit code: 0

总结

这样做好处就是 后期项目扩展 修改父类属性结构 子类不需要修改原有方法 便于扩展

init 方法 设计原则就是用来初始化成员变量。

原文地址:https://www.cnblogs.com/zhangdashao/p/4452308.html