20150617_OC之继承

本文详细介绍了Objective-C中的继承、封装和多态概念,通过代码示例展示了如何实现类的扩展、属性的定义以及方法的重写,以达到继承封装多态的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//
//  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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值