黑马程序员技术交流社区

标题: 多态复习 [打印本页]

作者: bullfrog    时间: 2014-9-2 22:09
标题: 多态复习
本帖最后由 bullfrog 于 2014-9-14 10:55 编辑

...................
作者: ______雨点ペ    时间: 2014-9-2 23:37
说白了,对于多态,有父类多态、抽象类多态、接口多态。最常用的是接口多态。因为一个类可以同时实现多个接口,这样这个类可以同时实现多个功能。而如果一个类继承了另一个类的话,就不能再继承其他类了,这样这个类只能获取这一个父类中的功能,不利于子类功能的扩展。这里说说子类继承父类问题:子类继承了父类,也就获取了父类的功能,包括父类中的成员变量和成员方法都会被子类获取;但是父类如果对其某些成员私有化,那么子类就不能获取到父类私有化的功能了;要想获得父类私有化的功能,要用set、get方法。其次,子类继承了父类,将获到父类的功能,但子类可以有自己特有的功能(特有的成员变量、方法),而对于子类特有的功能,父类是无法访问的,如果要访问子类特有的功能,就要对父类进行转型,把父类引用转型为子类引用,然后再调用子类特有的功能即可。
作者: 碎流    时间: 2014-9-2 23:48
______雨点ペ 发表于 2014-9-2 23:37
说白了,对于多态,有父类多态、抽象类多态、接口多态。最常用的是接口多态。因为一个类可以同时实现多个接 ...

总结的不错,,不过你最后那个把父类引用转型为子类引用怎么理解呢?
作者: ______雨点ペ    时间: 2014-9-3 09:58
碎流 发表于 2014-9-2 23:48
总结的不错,,不过你最后那个把父类引用转型为子类引用怎么理解呢?

比如一个父类Animal类引用指向子类Dog类的对象:Animal  a = new Dog( );Dog类中有一个Dog类特有的方法:eat( ). 那么Animal类的引用a就不能调用eat( ).只有把Animal类引用a转为其子类Dog类的引用,才能调用子类Dog类的特有的eat( ).如何转型呢?即:Dog d = (Dog)a.然后用子类Dog类的引用d就可以调用子类Dog类的eat( ),此时,相对于Dog类的引用d而言,eat( )不再是Dog类特有的方法,而是Dog类自己的方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2