概要:本文介绍了类的继承和派生的基本概念和其应用(多态),作为面向对象三大特性之一,理解继承是学好OC的必经之路!
一、类的继承和派生基本概念
引子:请想想这样一种场景。小明家的泰迪狗“旺财”按照面向对象的观点来看属于哪类呢?“旺财”属于泰迪狗类,而泰迪狗类又属于狗类。泰迪狗类拥有狗类的一切属性,而泰迪狗又拥有特有的毛发材质和身材体型。这样就构成了“狗->泰迪狗”这样一种继承派生关系。下面来看具体的定义。
1.概念
继承是指一个新类拥有全部被继承类的属性和方法,通过继承产生新类的过程也称作派生。
继承机制使得新类不仅有自己特有的属性和方法,而且有被继承类的全部属性和方法。
例如:
2.基类和派生类之间的关系
说明:
(1)基类的私有属性能被继承,不能被使用。
(2)OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类
3.方法的重写
从父类继承的方法,可能这个方法并不适合子类,可以在子类中重写父类的方法。 重写之后,父类的对象调用父类的方法;子类的对象,调用子类的方法,不会引起冲突。 从父类继承的方法,不适用于子类时,可以直接声明父类的同名方法,并定义。 不用考虑父类中,方法已存在的问题。 重写后,子类可以通过super调用父类的方法。
4.继承的注意事项
(1)子类不能定义和父类同名的变量,但是可以继承父类的变量
(2)OC类支持单一继承,不支持多继承 ,即“儿子只能有一个爸爸”
(3)OC类支持多层继承 ,即“儿子有爸爸,爸爸还有爷爷”
注意:继承体系中方法调用顺序:
(1)在自己类中找
(2)如果没有,去父类中找
(3)如果父类中没有,就去父类的父类中
(4)如果父类的父类也没有,就还往上找,直到找到基类(NSObject)
(5)如果NSObject都没有就报错了
5.实例变量的修饰符
记得在面向对象的时候我们就学习过几个修饰符及其作用,public、private、protected。现如今接触了继承,才算是对于实例变量的作用域有了一个新的认识。首先,一张图说明几个实例变量的作用域!
详细说明如下:
(1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。
(2)@protected (受保护的)只能在当前类和子类的对象方法中访问 (默认访问权限)
(3)@private (私有的)只能在当前类的对象方法中才能直接访问
(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通 过变量名访问
6.私有变量和私有方法
(1)私有变量
私有变量:只能在当前类使用的变量。既不能被子类继承,也不能被子类访问。即在.m文件中声明变量
(2)私有方法
在.h中没有声明,在.m中实现,此时该方法被称为私有方法。私有方法不能被子类继承,子类中也不可用。
二、多态
1.概念
多态就是某一类事物的多种形态
程序中的多态:
不同的对象以自己的方式响应相同名称方法的能力称为多态;或者多态是同一个行为具有多个不同表现形式或形态的能力。
2.多态的条件
多态的条件:父类的声明变量指向子类对象。
有继承关系、有方法重写
3.多态的优点
多态的主要好处就是简化了编程接口。它容许在类和类之间重用一些习惯性的命名,而不用为每一个新加的函数命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类的区分开来。
多态也使得代码可以分散在不同的对象中而不用试图在一个函数中考虑到所有可能的对象。 这样使得您的代码扩展性和复用性更好一些。当一个新的情景出现时,您无须对现有的代码进行改动,而只需要增加一个新的类和新的同名方法。
4.多态的实现
例如:Animal是父类,子类有Cat和Dog,子类分别重写了父类中的eat方法。实例化对象的时候可以用下面的方法:
5.多态的原理
多态的原理基于OC的动态绑定特性,动态类型能使程序直到执行时才确定对象所属类型,动态类型绑定能使程序直到执行时才确定要对对象调用的实际方法
注意:
(1)如果存在多态,父类是可以访问子类特有的方法
(2)如果不存在多态,父类是不可以访问子类特有的方法的
6.多态的实例
总结:学到这里忽然感觉到了原汁原味的面向对象编程是怎样的,借助于强大的OC动态绑定特定结合多态,令编程更灵活更方便。

本文详细介绍了Objective-C中类的继承和派生概念,包括基类与派生类的关系、方法重写、继承注意事项以及实例变量的修饰符。此外,还深入探讨了多态的概念、条件、优点、实现方式和实际应用,帮助读者更好地理解和应用面向对象编程。

602

被折叠的 条评论
为什么被折叠?



