黑马程序员技术交流社区

标题: 多态中父类的引用指向子类对象和接受子类对象有什么不同 [打印本页]

作者: 萧刹520    时间: 2015-10-26 09:47
标题: 多态中父类的引用指向子类对象和接受子类对象有什么不同
本帖最后由 萧刹520 于 2015-10-26 18:15 编辑

多态中父类的引用指向子类对象和接受子类对象有什么不同

作者: Phoenix_Szp    时间: 2015-10-26 09:59
父类型的引用指向子类型对象即是:向上转型又被称作,自动类型转换.
程序分两个阶段:编译阶段,运行阶段。
例如:
//父类 Animal和子类Cat
Animal a1 = new Cat();       
程序编译阶段只知道a1是一个Animal类型。程序在运行的时候堆中的实际对象是Cat类型。
假设父类 Animal和子类Cat中均有eat方法,那么               
                //程序在编译阶段a1被编译器看做Animal类型.
                //所以程序在编译阶段a1引用绑定的是Animal类中的eat方法.(静态绑定)
                //程序在运行的时候堆中的对象实际上是Cat类型,而Cat已经重写了eat方法。
                //所以程序在运行阶段对象的绑定的方法是Cat中的eat方法.(动态绑定)

作者: 萧刹520    时间: 2015-10-26 12:39
意思是程序运行阶段,父类引用接收了子类对象,所以a1.eat()调用的是子类的eat方法
作者: android小学徒    时间: 2015-10-26 13:29
2楼正解。。。
作者: polarfox17    时间: 2015-10-26 14:12
还不是很懂。。。。




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