1、多态:不同的对象以自己的方式响应相同名称方法的能力。
2、多态的条件:有继承关系、有方法重写(子类把父类的重名方法给重写了);父类的声明变量指向子类对象
代码体现:用父类类型的指针指向了子类对象。
例:Dog *d=[dog new];//Dog为Animal的子类
Animal *a=[Dog new];//父类Animal开辟了指向子类Dog的对象a
[(Dog *)a eat];//将父类Animal对象a强制转化成子类Dog类型,然后调用子类Dog的方法eat
3、多态的优点
简化了编程接口,在类和类之间重用一些习惯性的命名,不用为每一个新加的函数命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类区分开来。多态使得代码可以分散在不同的对象中,而不用试图在一个函数中考虑到所有可能的对象。
4、多态的注意点
1)、若存在多态,父类可以访问子类特有的方法
例: Animal *ani=[Dog new];
[(Dog *)ani eat];//可以编译,运行也成功(这里方法eat是子类Dog的方法)
2)、若不存在多态,父类是不可以访问子类特有的方法的
例: Animal *ani=[Animal new];
[(Dog *)ani eat];//可以编译,但是运行不成功 |
|