第五天-简便的构造方法

//
//  main.m
//  08-简便的构造方法
//
//  Created by Apple on 14/11/23.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "CZPerson.h"
#import "CZStudent.h"
int main(int argc, const char * argv[]) {
 
   CZPerson *person = [CZPerson personWithAge:10];
   
   NSLog(@"age = %d",person.age);
//  id 类型可以直接赋值给任意对象的指针
    
    NSObject *stu = [CZStudent personWithAge:20];
//  它可以执行成功吗?
//    [stu show];
    NSLog(@"%@",stu);
    
//    [stu show];
    
//   instancetype 不可以用来定义变量
//    instancetype stu3 = stu;
    
//    [stu stringByAppendingString:@"aaa"];
    
//  这两个方法都是提供的
     NSString *str  = [[NSString alloc] initWithFormat:@"str age = %d",10];
//   类方法使用起来更加简便
     NSString *str1 = [NSString stringWithFormat:@"str1 age = %d",20];
    
    NSLog(@"%@",str);
    NSLog(@"%@",str1);
    
    
    
    return 0;
}

//
//  CZPerson.h
//  1123-知识点回顾
//
//  Created by Apple on 14/11/23.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface CZPerson : NSObject

@property int age;

//instancetype 相对于id类型,它会自动进行类型检查,如果不一致就会报一个警告
//instancetype 只可以作为返回类型
//以后返回类型使用instancetype
//简便构造方法,都是以类名去掉前缀然后小写首字母开头
+ (instancetype) personWithAge:(int) age;
//初始化对象方法
- (instancetype) initWithAge:(int) age;

@end

//
//  CZPerson.m
//  1123-知识点回顾
//
//  Created by Apple on 14/11/23.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZPerson.h"

@implementation CZPerson
//命名规范:以类名去掉前缀然后首字母小写
+ (instancetype) personWithAge:(int) age
{
//  如果有子类,那么子类就不使用这个方法来创建对象,并调用它的特有方法
//    CZPerson * person = [[CZPerson alloc] init];
//   在方法中要使用self来开辟存储空间,只有这样话,子类才可以使用这个方法
//    CZPerson *person = [[self alloc] init];
//    if (person) {
//        person.age = age;
//    }
    
//    此处是绝对不可以这么干,因为 [self alloc] 返回是一个实例对象,self是一个类对象
//    类对象在整个程序中只有一个,但实例对象可以创建N多个
//    self = [[self alloc] initWithAge:10];

    
    return [[self alloc] initWithAge:age];
}


- (instancetype) initWithAge:(int) age
{
    if (self = [super init]) {
        self.age = age;
    }
    return self;
}

@end

//
//  CZStudent.h
//  1123-知识点回顾
//
//  Created by Apple on 14/11/23.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZPerson.h"

@interface CZStudent : CZPerson

//定义一个CZStudent特有的方法
- (void) show;

@end

//
//  CZStudent.m
//  1123-知识点回顾
//
//  Created by Apple on 14/11/23.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZStudent.h"

@implementation CZStudent


- (void) show
{
    NSLog(@"age = %d",self.age);
}

@end


你可能感兴趣的:(第五天-简便的构造方法)