黑马程序员技术交流社区
标题:
多态问题
[打印本页]
作者:
李万海
时间:
2013-3-22 10:02
标题:
多态问题
本帖最后由 李万海 于 2013-3-22 16:44 编辑
class Rodent{
public void eat(){
System.out.println("Rodent.eat()");
drink();
}
public void drink(){
System.out.println("Rodent.drink()");
}
}
class Mouse extends Rodent{
public void drink(){
System.out.println("Mouse.drink()");
}
}
public class DuotaiTest {
public static void main(String[] args){
Rodent m = new Mouse();
m.eat();
}
}
复制代码
其运行结果是什么?并解释一下。谢谢
作者:
孙晋学
时间:
2013-3-22 10:19
Rodent.eat();
Mouse.drink();
第一个是因为继承,Mouse 继承父类的eat方法()
drink方法子类做了覆盖,动态绑定
作者:
freeboyhrk
时间:
2013-3-22 10:20
运行结果是
Rodent.eat()
Mouse.drink()
多态的体现是父类引用指向了自己的子类对象。好处是提高了程序的扩展性,但是只能使用父类引用访问父类成员。前提是必须是类与类之间有关系,如继承或实现,通常都存在覆盖,这个程序里,Mouse继承了Rodent,重写了Rodent的drink方法。
new完mouse后,调用了继承了父类的eat方法,eat方法里有打印Rodent(),还有调用本类drink方法。
所以,结果如上。
作者:
谭辉
时间:
2013-3-22 13:28
结果如楼上所述
毕老师的视频中说过
成员函数在多态调用时,编译看左边,运行看右边。
如Fu f = new Zi();
多态中成员变量的特点:无论编译和运行,都参考左边(引用类型所属的类)
多态中,静态成员函数的特点:无论编译还是运行,都参考左边
代码中调用的是成员函数,当然是看右边Mouse类中的方法
作者:
谷文仁
时间:
2013-3-22 13:49
运行结果你可以自己编译去测试,至于多态是什么,你应该好好去学习基础,因为口头是很难表达清楚的.. 建议你去多花点时间
作者:
田光峰
时间:
2013-3-22 14:46
运行结果是:
Rodent.eat()
Mouse.drink()
当到Rodent m = new Mouse();代码时创建的Mouse类型就会向上转型为Rodent类型(并会动态绑定)。用Rodent的对象调用eat()方法时会调用Rodent中的eat()方法因他在继承类中并未被覆盖,当调用drink()方法时会发现他已在继承类中被覆盖了就会调用继承类中drink()方法。
作者:
汪平乐
时间:
2013-3-22 15:23
多态的指的是编译时类型变化,而运行时类型不变。多态分两种:
1.编译时多态:编译时动态重载;
2.运行时多态:指一个对象可以具有多个类型。
Rodent m = new Mouse() 父类引用指向子类,对象m的编译时类型为Rodent ,运行时类型为Mouse(编译看左边,运行看右边)。
答案是 Rodent.eat()
Mouse.drink()
作者:
陈丽莉
时间:
2013-3-22 16:04
记得及时处理帖子哦,继续追问,或将分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2