黑马程序员-多态

一.多态的概念

多态的前提是必须有继承,换句话说,没有继承就没有多态.

而关于多态的定义,父类指针指向子类对象.

二.多态的例子

在概念中我们提到,必须要要继承,在上一篇文章中 Person 和 Student 例子,Student 例子继承了 Person.

我们在创建实例对象的时候,可以看出多态的体现,如下图:

打印结果是: "Student----talk"

解析: 在形态2中,表示将 Student类的对象地址给了 Person 类型的指针变量.这时,我们可以看到父类Person指针指向了子类Student对象,这种形式便是多态.

同时,在调用对象方法的时候,编译器会自动对对象 p 的真正类属性进行检测,p 的真正类型是 Studnet, 而不是 Person,所以调用的是 Student 中的 talk方法.

深度解析: 在上边例子中,父类指针保存的是子类的内存地址. 检测对象真正的类型状态看的是"="号的右边.

所以,我们最好不要倒过来写,让父类的地址赋值给子类对象.  OC 是弱语法,编译器不会提示错误,同时反过来写会造成逻辑混乱和可读性变差,这也算是多态的一个弊端.下边是几个不推荐写法的例子:

 

三.多态的局限性
(1)父类型的变量,不能直接调用子类特有的方法.

(2)必须强转子类类型变量后,才可以调用子类的方法.

总结:父类不能用子类的东西,如果想要用子类的东西,必须要强装成子类才行.

 

四.多态的好处

多态的存在,必定是因为它有好的一方面可以让我们来应用和学习. 多态的好处就在于,他可以当函数的参数是父类指针时,子类对象作为参数传递给这个函数方法.比如下边这段代码:

除此之外,我们在系统的方法,用 id作为参数的类型更为常见.

 

posted @ 2015-12-03 22:14  coderQin  阅读(146)  评论(0)    收藏  举报