20150617_OC之繼承

//
//  Person.h
//  IOS150617_ObjectiveC_繼承
//
//  Created by qianfeng on 15/6/17.
//  Copyright (c) 2015年 Peng Junlong. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject

{
    NSString *_name;
    int       _age;
}
//若將上面的變量聲明省略,使用@property,則實例變量是私有的
//@property 展開的實例變量是私有的,私有的實例變量子類是不能繼承的
//實質上@property展開的是setter和getter方法以及@synthesize,而實例變量是由@synthesize展開的,@synthesize是在.m文件中

@property (copy,nonatomic)NSString *name;
@property (assign,nonatomic)int age;

- (void)printPerson;

@end


//  Person.m
//  IOS150617_ObjectiveC_繼承
//
//  Created by qianfeng on 15/6/17.
//  Copyright (c) 2015年 Peng Junlong. All rights reserved.
//

#import "Person.h"

//類擴展(匿名類別),實現實例變量及方法的私有化(在.h文件中沒有定義,在.m文件中定義的),子類不能繼承,若想將其公開,則可將類擴展在.h文件中聲明
@interface Person ()
{
    float _weight;
}
@property (assign,nonatomic)float weight;
- (void)setName:(NSString *)name andAge:(int)age;

@end

@implementation Person

- (void)printPerson
{
    NSLog(@"name = %@,age = %i",_name,_age);
}

-(void)setName:(NSString *)name andAge:(int)age
{
    _name = name;
    _age = age;
}

@end

//  Student.h
//  IOS150617_ObjectiveC_繼承
//
//  Created by qianfeng on 15/6/17.
//  Copyright (c) 2015年 Peng Junlong. All rights reserved.
//

#import "Person.h"

@interface Student : Person
{
    int _num;
}
@property (assign,nonatomic)int num;

- (void)printStudent;
@end

//  Student.m
//  IOS150617_ObjectiveC_繼承
//
//  Created by qianfeng on 15/6/17.
//  Copyright (c) 2015年 Peng Junlong. All rights reserved.
//

#import "Student.h"

@implementation Student

- (void)printStudent
{
    NSLog(@"name = %@,age = %i,num = %i",_name,_age,_num);
}
@end

//  main.m
//  IOS150617_ObjectiveC_繼承
//
//  Created by qianfeng on 15/6/17.
//  Copyright (c) 2015年 Peng Junlong. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"

//繼承    封裝      多態
//繼承也叫做派生
//Person
//{
//    NSString *_name;
//    int       _age;
//}
//@interface Student : Person
//{
//    int _num;
//}
//
//- (int)num;
//
//@end
//子類繼承父類,父類中非私有的實例變量及方法子類可以直接繼承
//子類擁有了父類的非私有的實例變量及方法加上子類本身定義的實例變量及方法
//NSObject  根類(基類):所有的類直接或者間接繼承NSobject類

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Student *mu = [[Student alloc] init];
        [mu setName:@"穆"];
        mu.age = 25;
        mu.num = 123456;
        [mu printPerson];
        [mu printStudent];
        [mu setWeight:3.45];
        NSLog(@"%.3f",[mu weight]);  //  不能使用,該方法是通過類擴展得到,是私有的
        
    }
    return 0;
}


發佈了71 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章