OC类的继承-super关键字

Object-C技术学习,更多资源请访问 https://www.itkc8.com

//  main.m

//  super关键字

//

//  Created by Goddog on 15/1/7.

//  Copyright (c) 2015年 Goddog. All rights reserved.

//

/*

 1.如果需要在子类方法中调用父类被覆盖的实例方法,可以使用super关键字来调用。

 2.super同self一样不能出现在类方法中,类方法的调用者只能是类的本身。

 3.子类继承父类时,子类可以获得父类中定义的成员变量,子类接口部分不能定义与父类接口部分重命名的成员变量。

 4.在类实现部分定义的成员变量被限制在该类的内部,故子类完全可以与父类实现部分定义的成员变量同名。

 5.当子类实现部分定义了与父类重名的成员变量,子类的成员变量就会隐藏父类的成员变量,可以调用父类的方法来访问父类中被隐藏的成员变量。

 6. 虽然程序只创建一个对象,但是对象内部还是有两块内存来保存a的成员变量,一块父类隐藏的,一块子类实现的。

 */

 

//
//  Father.h
//  super关键字
//
//  Created by Goddog on 15/1/7.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//


#import <Foundation/Foundation.h>

@interface Father : NSObject

//定义成员变量
{
    int _a;
}
@property (nonatomic,assign) int a;

-(void) see;

@end

 

//
//  Father.m
//  super关键字
//
//  Created by Goddog on 15/1/7.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import "Father.h"

@implementation Father

@synthesize a = _a;
-(id) init
{
    if (self == [super init]) {
        self->_a = 8;
    }
    return self;
}

-(void) see
{
    NSLog(@"父亲看到了美女一号");
}
@end

 

//
//  Son.h
//  super关键字
//
//  Created by Goddog on 15/1/7.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

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

@interface Son : Father
-(void) access;
-(void) look;
@end

 

//
//  Son.m
//  super关键字
//
//  Created by Goddog on 15/1/7.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import "Son.h"

@implementation Son

{
    //隐藏父类的成员变量
    int _a;
}

//重写init方法
-(id) init
{
    if (self == [super init]) {
        self->_a = 12;
    }
    return self;
}

//子类方法
-(void) access
{
    //如果直接访问是当前类中的成员变量
    NSLog(@"直接访问时子类中的成员变量:%d",_a);
    
    //访问父类的被隐藏的成员变量
    NSLog(@"访问父类中被隐藏的成员变量:%d",super.a);
}

//重写方法
-(void) see
{
    NSLog(@"儿子看到了美女二号!");
}

//调用父类的方法
-(void) look
{
    [super see];
}

@end

 

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

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //实例化对象
        Son* son = [[Son alloc] init];
        //调用父类的see方法
        [son look];
        
        //看访问的是父类还是本身
        [son access];
    }
    return 0;
}

Object-C技术学习,更多资源请访问 https://www.itkc8.com

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值