面向对象(类的继承)

面向对象(类的继承)

继承的特点

当子类扩展父类时,子类可以继承得到父类的全部成员变量和全部方法(包括初始化方法)。

重写父类方法

方法的重写必须注意方法签名关键字要完全相同,也就是方法名和方法签名中的形参标签都需要完全相同,否则就不能算方法重写。

super关键字

super即可出现在类方法中,也可出现在实例方法中。在类方法中使用super调用父类的方法时,被调用的父类方法只能是类方法;在实例方法中使用super调用父类方法时,被调用的父类方法只能是实例方法。
当子类继承父类时,子类可以获得父类中定义的成员变量,因此,子类接口部分不允许定义与父类接口部分重名的成员变量。
在类的实现部分定义的成员变量将被限制在该类的内部,因此,父类在类实现部分定义的成员变量对子类没有任何影响。无论是接口部分还是实现部分,子类定义的成员变量都可以与父类实现部分定义的成员变量同名。
当子类实现部分定义了与父类重名的成员变量时,子类的成员变量就会隐藏父类的成员变量。此时可通过调用父类的方法来访问父类中被隐藏的成员变量。

例:
JSParend.h
#import <Foundation/Foundation.h>
@interface JSParent : NSObject{
    int _a;
}
@property (nonatomic , assign) int a;
@end
JSParend.m
#import <Foundation/Foundation.h>
#import "JSParent.h"

@implementation JSParent
- (id) init{
    if(self = [super init]){
        self->_a = 5;
    }
    return self;
}
@end

JSSub.h
#import <Foundation/Foundation.h>
#import "JSParent.h"

@interface JSSub:JSParent
- (void) accessOwner;
@end

JSSub.m
#import <Foundation/Foundation.h>
#import "JSSub.h"

@implementation JSSub{
    //该成员变量将会隐藏父类的成员变量
    int _a;
}
- (id) init{
    if(self = [super init]){
        self->_a = 7;
    }
    return self;
}
- (void) accessOwner{
    //直接访问的是当前类中的成员变量
    NSLog(@"子类中_a成员变量: %d",_a);
    //访问父类中被隐藏的成员变量
    NSLog(@"父类中被隐藏的_a成员变量: %d", super.a);
}
@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值