黑马程序员-多态
一.多态的概念
多态的前提是必须有继承,换句话说,没有继承就没有多态.
而关于多态的定义,父类指针指向子类对象.
二.多态的例子
在概念中我们提到,必须要要继承,在上一篇文章中 Person 和 Student 例子,Student 例子继承了 Person.
我们在创建实例对象的时候,可以看出多态的体现,如下图:
打印结果是: "Student----talk"
解析: 在形态2中,表示将 Student类的对象地址给了 Person 类型的指针变量.这时,我们可以看到父类Person指针指向了子类Student对象,这种形式便是多态.
同时,在调用对象方法的时候,编译器会自动对对象 p 的真正类属性进行检测,p 的真正类型是 Studnet, 而不是 Person,所以调用的是 Student 中的 talk方法.
深度解析: 在上边例子中,父类指针保存的是子类的内存地址. 检测对象真正的类型状态看的是"="号的右边.
所以,我们最好不要倒过来写,让父类的地址赋值给子类对象. OC 是弱语法,编译器不会提示错误,同时反过来写会造成逻辑混乱和可读性变差,这也算是多态的一个弊端.下边是几个不推荐写法的例子:
三.多态的局限性
(1)父类型的变量,不能直接调用子类特有的方法.
(2)必须强转子类类型变量后,才可以调用子类的方法.
总结:父类不能用子类的东西,如果想要用子类的东西,必须要强装成子类才行.
四.多态的好处
多态的存在,必定是因为它有好的一方面可以让我们来应用和学习. 多态的好处就在于,他可以当函数的参数是父类指针时,子类对象作为参数传递给这个函数方法.比如下边这段代码:
除此之外,我们在系统的方法,用 id作为参数的类型更为常见.
浙公网安备 33010602011771号