继承和派生

继承:类和类之间的关系
派生:子类在父类基础上衍变出一些新的特性或者功能
子类比父类更加强大
父类 parentClass superClass 【基类】
子类 childClass subClass 【派生类】

NSObject 还可以称为根类

C++ 继承方式

private 私有继承
protected 受保护继承
public 公有继承

OC没有继承方式之说,类似C++中的公有继承
OC的方法全部都是公有的,没有私有方法之说

C++属于多继承 可以继承多个类
多继承缺点:二义性【不确定继承哪个类】

OC没有多继承 属于单继承

OC怎么实现多继承?
通过协议来实现

OC成员变量的访问控制

默认受保护
public:
公有的,作用域:类外可以直接使用【对象指针—>_height】,类内(-)方法可以直接使用;子类继承父类之后,子类(-)方法可以直接使用
+方法不可用,因为和成员变量无关
protected:
受保护,类外不能直接使用,但是可以通过类的方法间接使用;类内(-)方法可以直接使用【子类可以继承】,子类继承父类之后,子类(-)方法可以直接使用
private:
私有,类外不能直接使用,但是可以通过类的方法间接使用;类内(-)方法可以直接使用;子类不能继承父类的私有的成员变量【子类不能直接使用这个私有变量】

子类可以直接使用父类的受保护的和公有的变量,父类私有的子类不能直接使用
父类的私有变量子类可以间接使用父类的方法访问
self.secret

子类对象分为2部分

一部分是继承的父类的变量,还有部分子类自己专有的变量,继承之后都是子类自己的,只是来源不一样

OC有没有私有变量、私有方法?
如果没有,怎样实现
有私有变量 @private修饰
没有像C++一样的私有方法,但是可以实现

OC默认所有的方法都是公有的,子类可以直接使用的

OC如何实现私有的?

【方法有如下2种】
1.在头文件中不声明方法,只在.m类的实现部分实现方法
没有对外公开,只是方便类内的函数来调用
不能调用没有声明的方法
2.把方法声明写在匿名类别中,匿名类别写在类的实现上方
方法的实现仍然在类的实现部分

类的延展、类的扩展、匿名类别

匿名类别可声明成员变量【默认/缺省的访问控制:私有的】子类不可直接继承
匿名类别:可以把不公开的成员方法和变量在匿名类别中进行声明,达到私有化的目的

继承的方法可以不声明

OC是动态的语言,编译时不检测,运行时检测

【OC运行机制】

OC执行方法的过程:【编译时不检测】程序运行到方法调用的时候,首先去指针指向的对象所属的类找有没有实现方法,如果有就调用,如果没有,就去父类的方法中去找,依次类推,直到最后,如果没找到,直接崩溃

super 不是对象也不是方法【当前对象执行父类的方法】

当子类需要在父类的方法基础上扩展一些新的功能,这个时候在重写父类的方法的时候,可以先用super调用父类的方法,再写自己需要扩展的方法
[super printVar];
C++ 没有super 只能通过类域调用[super Father::printVar];

子类重写父类方法后,子类如果想要调用父类的方法,那么需要用super调用
super 只是一个修饰符/编译器符号,表示当前对象去调用父类的方法,仅此而已【不是指针】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值