本帖最后由 不破大地 于 2013-6-12 00:00 编辑
楼主,不对啊,没改之前也是编译失败 ,错误提示为:The method run() from the type Person is not visible
从结果上看是格式不对哈,不管是原来的show内部代码还是更改后的代码,只要将其转换成person类引用便可:((Person) it.next()).run();
查看了下API文档后,我觉着是因为:iterator迭代出来的是一个元素,元素应该不可以直接调用原来的方法,而是要将其转换成具体的类型后在调用,
又因为student继承了person,并覆盖了run方法,所以当返回student对象元素时,父类引用指向了子类对象,故根据多态,编译时时person的run方法
但是实际运行时调用的为student的方法(编译看左边,运行看右边)。
打印的结果为:
Person
Person
Student
Student
补充一句:我也纠结了好久。。。
|