Objective-C(5)继承与多态-创新互联
类的继承关系
创新互联,为您提供网站建设、成都网站制作、网站营销推广、网站开发设计,对服务成都柴油发电机等多个行业拥有丰富的网站建设及推广经验。创新互联网站建设公司成立于2013年,提供专业网站制作报价服务,我们深知市场的竞争激烈,认真对待每位客户,为客户提供赏心悦目的作品。 与客户共同发展进步,是我们永远的责任!
复合关系:has a
继承关系:is a
思考这个问题:
在编写猫类和狗类时,会发现这两个类中有大量相同或者类似的属性及方法。
将动物都共有的属性及方法放在一个动物类中,并让狗类和猫类都继承自动物类
狗类和猫类分别实现自己特有的属性及方法
B继承A == A派生B
A称作父类或基类,B称作子类或派生类
B包含A的所有属性及方法
继承关系在接口部分指定:
@interface className:parentClassName
...
@end
NSObject是所有OC类的基类,被称作“超类”
只能继承一个 --- 单继承
某些语言,如C++,可以多重继承,即一个类可以有多个父类,OC并不支持多重继承
C++中支持多种继承方式的指定,即在继承时可以指定public、protected、private以确定父类中的成员在子类的中的访问权限,OC也不支持多种继承方式。
虽然OC并不支持多继承,但OC中使用“协议”实现了多继承的一部分功能。
其他说明:
OC中不允许子类与父类拥有相同名字的属性
子类调用方法时,是先在当前类中找,找不到再到父类中找
子类可以重写父类的方法,即覆盖了父类的方法
父类中的@protected属性在子类方法中可以访问,但@private的不能。
继承的工作原理:
isa是超类NSObject中的成员变量,它指向该类型的类对象
在对象的方法中,self指针指向当前对象
通过self指针可以访问对象的属性及调用方法
在对象的方法中,super指针指向当前对象的父类部分
通过super指针可以访问父类的属性及调用方法(尤其是被覆盖的方法)
重新父类方法
子类中包含父类的所有属性及方法,其中父类的方法可以在子类中进行重写。
重写要求:方法名、参数、返回值与父类方法一致。
如:重写description方法能够,能在NSLog以%@输出时,输出指定的字符串。
重写父类方法时,有时需要执行父类的动作,则使用super指针指定调用父类的方法。
多态
父类指针存储子类对象地址时,调用方法时出现的情况
相同消息给与不同的对象会引发的不同动作
调用对象方法时会检测对象的真实方法
OC中已经实现了方法的多态
注意:让子类指针指向父类对象 是不安全的做法
多态的好处:
用一份代码代替很多份代码(如函数传递基类指针)
多态的局限性:
父类类型的指针变量是不能用来调用子类的方法 (有时虽然能成功但不推荐)
如果需要,则应将父类指针转换为子类指针后再调用子类的方法
多态指针
父类对象指针可以存储子类对象的地址,这样的指针被称作多态指针
多态指针经常用作参数、返回值等
id就是OC中最常使用的多态指针类型,相当于NSObject*
另外一个类型 instancetype,也可以认为是id类型
但只用在一些方法的返回值上,比id类型多了一个类型检查的功能。
为一个对象指针赋空值时,应当使用nil,而对一个非OC对象指针赋值时,应当使用NULL。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文名称:Objective-C(5)继承与多态-创新互联
链接URL:http://azwzsj.com/article/eecjg.html