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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© vaqh 中级黑马   /  2014-7-27 21:57  /  775 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Animal
{
         int num = 4;
         void eat()
         {
                 System.out.println("吃...");
         }
         static void sleep()
         {
                 System.out.println("睡觉。。。");
         }
}
class Cat extends Animal
{
        int num = 5;
        void eat()
        {
                System.out.println("吃鱼");
        }
        static void sleep()
         {
                 System.out.println("cat睡觉。。。");
         }
}
class Test
{
        public static void main(String[] args) {
                Animal a = new Cat();
                a.eat();
                a.sleep();
                System.out.println(a.num);
        }
}
以上代码的执行结果是什么?为什么呢?请给出解释?感觉太复杂了

2 个回复

倒序浏览
毕老师的三句总结
成员变量    编译和运行都参考等号的左边。所以是 a.num是左边的父类的num
成员函数,依赖的是对象, 编译看左边,运行看右边。因为成员函数存在覆盖特性。所以是 a.eat()是右边的子类的eat()
静态函数,依赖的是类. 编译和运行都参考等号的左边。所以是 a.sleep()是左边的父类的sleep()
回复 使用道具 举报
hjfeng1987 发表于 2014-7-27 23:51
毕老师的三句总结
成员变量    编译和运行都参考等号的左边。所以是 a.num是左边的父类的num
成员函数,依 ...

    精髓啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马