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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yy306525121 中级黑马   /  2015-1-13 21:34  /  2370 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

原题是这样的:
public class Test {
    public static void main(String[] args) {
        Zi z = new Zi();
    }
}

class Fu {
    int num = 5;

    Fu() {
        show();
        System.out.println(num);
    }

    void show() {
        System.out.println("55");
    }
}

class Zi extends Fu {
    int num = 3;

    Zi() {
    }

    void show() {
        System.out.println(num);
    }
}

各位可以猜猜打印结果





结果是0   5,你猜对了吗???

本屌也是通过debug和问度娘之后才明白,下面就讲讲这道题
按照正常程序走,成员变量在对象创建的同时会自动复制为0,然后走构造函数,这里有一个问题,如上题子类中的    int num = 3;中的3在什么时候赋值给num,通过debug多次之后发现这个值3是在构造函数中的super()方法运行之后才会赋给num,其实父类中的构造函数可以说也隐藏了一个super()方法,因为父类上面还有一个Object类,但是那么问题来了,父类构造函数中的 show();调用的是父类中的show()方法呢还是子类中的show()方法呢?这里体现了继承的多态性,如果子类继承了父类中的方法,那么不管你在子类还是在父类中调用这个方法名,最终执行的都是子类中的方法,我是这样理解的,子类继承了父类的方法并进行了重写,那么子类中的功能就比父类中的功能要强大,那么肯定是要用子类中的方法了啊,当父类构造函数中调用show()方法的时候,其实执行的是子类中的show()方法,但是这个时候子类构造函数中的super()方法还没有执行完,那么打印的num值就是0了,最终打印出来的结果就是0    5



这里有两点是容易弄错的:
1,方法的成员变量在对象创建的时候int的默认值是0的,当你构造函数中的super()方法执行完之后才会将你的值赋给变量
2,子类复写父类的方法之后,即使你在父类中直接调用方法,最终运行的却是子类中的方法

评分

参与人数 1黑马币 +10 收起 理由
李一白_ + 10 很给力!

查看全部评分

24 个回复

倒序浏览
大神解答的够迅速的啊
回复 使用道具 举报
沙发是我滴 小山羊
回复 使用道具 举报

哈哈,今天晚自习研究了一下
回复 使用道具 举报
IcedCoffee 发表于 2015-1-13 21:36
沙发是我滴 小山羊

沙发被别人抢了:(
回复 使用道具 举报
其实关键是还没有了解java里面的内存机制,上课老师讲的有几点没讲清,有一个临时存储区,
回复 使用道具 举报
lionel 发表于 2015-1-13 21:38
其实关键是还没有了解java里面的内存机制,上课老师讲的有几点没讲清,有一个临时存储区, ...

恩,这个初始化以前一直没注意,这点内存咋弄的还是有点迷糊
回复 使用道具 举报
IcedCoffee 发表于 2015-1-13 21:36
沙发是我滴 小山羊

椅子坐着舒服么:P
回复 使用道具 举报
大神就在我身边...
回复 使用道具 举报
上课没弄明白show()方法的执行顺序问题。。。
回复 使用道具 举报
呵呵。。。
回复 使用道具 举报
eli0827 发表于 2015-1-13 21:56
上课没弄明白show()方法的执行顺序问题。。。

因为子类重写了父类的show()方法,所以不管在哪调用,最终执行的都是子类的show(),可以自己做个小实验实验一下
回复 使用道具 举报
寄存器应该吧,我去度娘看看
回复 使用道具 举报
gecl 中级黑马 2015-1-13 22:45:37
14#
:o才整明白。。。上课听完也没太懂
回复 使用道具 举报
完全懵了...
回复 使用道具 举报
人工帮顶
回复 使用道具 举报
很好 帮顶一下
回复 使用道具 举报
路尽鹭飞 来自手机 中级黑马 2015-1-13 23:33:47
18#
小山羊同学,真开心看见你
回复 使用道具 举报
学习了!
回复 使用道具 举报
楼主你好牛逼啊,
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马