黑马程序员技术交流社区

标题: 关于多态的问题 [打印本页]

作者: 胡威    时间: 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