黑马程序员技术交流社区
标题:
关于多态的问题
[打印本页]
作者:
胡威
时间:
2011-11-15 21:25
标题:
关于多态的问题
abstract class Animal
{
abstract void eat();
}
class Cat extends Animal
{
void eat()
{
System.out.println("吃鱼啦");
}
void catchMouse()
{
System.out.println("抓老鼠啦");
}
}
class AnimalDemo
{
public static void main(String[] args)
{
Animal x=new Cat();
x.catchMouse();
}
}
这是毕老师视频中的一个例子,问下主函数中x.catchMouse()为什么就不行了,x不是既是cat有时animal吗,animal里面没有catchMouse(),可是Cat里面有啊,不也可以调用吗,为什么就编译出错呢?
作者:
宋文轩
时间:
2011-11-15 21:49
本帖最后由 宋文轩 于 2011-11-15 21:53 编辑
看=号左边的 =号左边是这个对象的类型 并不是既是猫又是动物 用的方法也只能是动物类型的 既然是Animal类型的,这个动物是不具备抓老鼠的方法的,所以是用不了的。但是如果动物具备了吃饭的方法 有个子类猫 一个子类狗 那么猫和狗本身都具备吃饭的方法 覆盖了父类动物的方法 那么Animal cat=new cat(); Animal dog=new dog();
这样建立的对象就直接可以用x.eat() 这个方法。
作者:
胡威
时间:
2011-11-15 22:37
谢谢,现在明白了,你说的就是向上转型的知识
作者:
xiwangliujiao
时间:
2011-11-16 00:35
虽然我们个人认为就是应该有那个方法的,但是编译器不认,他就认为那个catchMouse()方法是Cat类的,而不是Animal的,需要转型的
作者:
高庆亮
时间:
2011-11-16 10:53
也来学习一下!{:soso_e113:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2