A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡威 黑马帝   /  2011-11-15 21:25  /  2300 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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里面有啊,不也可以调用吗,为什么就编译出错呢?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 宋文轩 于 2011-11-15 21:53 编辑

看=号左边的  =号左边是这个对象的类型 并不是既是猫又是动物  用的方法也只能是动物类型的 既然是Animal类型的,这个动物是不具备抓老鼠的方法的,所以是用不了的。但是如果动物具备了吃饭的方法 有个子类猫 一个子类狗 那么猫和狗本身都具备吃饭的方法 覆盖了父类动物的方法 那么Animal cat=new cat(); Animal dog=new dog();
这样建立的对象就直接可以用x.eat() 这个方法。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
胡威 黑马帝 2011-11-15 22:37:36
藤椅
谢谢,现在明白了,你说的就是向上转型的知识
回复 使用道具 举报
虽然我们个人认为就是应该有那个方法的,但是编译器不认,他就认为那个catchMouse()方法是Cat类的,而不是Animal的,需要转型的
回复 使用道具 举报
也来学习一下!{:soso_e113:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马