OC语法——类和继承

一.类和继承
1.继承:在已有的类的基础上进行扩展或者修改
2.继承的特性:
(1)子类继承类父类的所有特性(包含数据成员和成员函数)
(2)子类可以增加:
新的方法,新的实例变量,重新定义父类的方法
3.NSObject是Cocoa环境下的根类,NSObject中定义了类所有OC对象的基本方法
二.利用继承定义新的类
1.继承的定义

.h文件:
@interface 类名:父类
{
//实例变量的声明
}
//方法的声明
//父类方法的重写
@end

2.类定义和头文件
(1)子类继承父类必须引入父类的头文件
(2)子类除了能访问子类新增的实例变量,也能够访问父类中定义的实例变量,;
同时,子类也可以响应父类中的方法,但是如果子类重写了父类中的方法,就需要看实际运行中哪个方法被执行了
(3)

@interface A:NSObject
- (void)method1;
- (void)method2;
- (void)method3;
@end
@interface B:A
- (void)method2;
@end
@interface C:B
- (void)method1;
@end
int main()
{
   [B method2];//B中重写了method2,调用的是B定义的method2
   [C method1];//C中重写了method1,调用的是B定义的method1
   [C method3];//B和C中都没有重写method3,调用的是A定义的method3
}

(4)调用父类的方法:当子类中重写了父类的方法,但依然想调用父类中的方法
super关键字:和self不同的不能确定的指向某个对象,只能被用来调用父类的方法,既不能赋值也不能作为返回值

[super method2];//B中使用super关键字可调用父类A中method2
[self method2];//B中使用self调用的是当前类中的method2(B中的method2)

(5)初始化方法的定义
当新增的实例变量需要被初始化时,子类需要同和父类不同的初始化方法

//子类中重写init初始化方法时
- (id)init
{
 self = [super init];//调用了父类的init方法,会将父类中的实例变量都初始化
 if(self != nil)
 {
    ...//子类专有的初始化方法
 }
 return self;
}

使用alloc方法会将所有实例对象的变量都初始化成0,除了isa实例变量,如果子类新增的实例变量都要初始化成0,则省去init方法
(6)初始化方法的两种方法:
初始化init方法中将所有实例变量都初始化;
现在初始化方法中设置实例变量为默认值,然后调用其他方法来设置实例变量的值;
3.继承和方法的调用
(1)self:指的是收到当前消息的实例变量
(2) super:调用的父类的方法,调用的方法是由编译时类的继承关系决定的
4.方法定义时的注意事项
(1)局部方法:在类的接口中定义的方法是对外公开的,在类的实现(.m文件)中定义的方式局部方法,只可以类内自己调用,即使外部引入这个类的文件,也不能获的这个类的局部方法
编程时注意的事项:
当子类新增的方法不知道父类已经实现的局部方法而去重写这个方法,所以需要为局部方法前加上固定的前缀
(2)指定初始化方法
子类中重写父类中指定的初始化方法时,一定要调用父类的指定初始化方法,不能调用父类的非指定方法,否则父类的非指定初始化方法会调用指定的初始化方法,从而形成递归循环调用,造成崩溃

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值