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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒋映辉   /  2012-7-2 21:51  /  7416 人查看  /  45 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邵阳 于 2012-7-4 22:15 编辑

http://bbs.itheima.com/thread-18505-1-1.html

关于这个里面的帖子你能不能详细解答一下啊!
三楼回答基本上等于没回答没有重点,答非所问。

运行过程大家都知道,关键是这句
但是打印结果却是A.draw(), radius = 0
为什么啊
回复 使用道具 举报
邵阳 发表于 2012-7-4 22:13
http://bbs.itheima.com/thread-18505-1-1.html

关于这个里面的帖子你能不能详细解答一下啊!

麻烦你好好理解三楼的意思   他的回答很好了
   然后运行到了 draw();这,本来吧应该用父类的,但是子类已经把其它复写了,既然子类的已经有了,又是建立的子类的对象,所以就调用的是子类的 draw();方法,也就是输出这句  System.out.println("A.draw(),radius = "+radius);然后这里呢radiues变量还有初始化,也就是还是默认初始化的值,所以你打印出来了就是A.draw(), radius = 0这个了
回复 使用道具 举报
蒋映辉 发表于 2012-7-4 22:21
麻烦你好好理解三楼的意思   他的回答很好了
   然后运行到了 draw();这,本来吧应该用父类的,但是子类 ...

问  什么时候显示初始化。为什么没有显示而是默认初始化
回复 使用道具 举报
版主无私为大家奉献,甚是感激,理解万岁!!!!
回复 使用道具 举报
邵阳 发表于 2012-7-4 22:13
http://bbs.itheima.com/thread-18505-1-1.html

关于这个里面的帖子你能不能详细解答一下啊!

算了  我给你开小灶 好吧
class B{
    private int radius = 10;
    public void draw(){
    System.out.println("B.draw(),radius = "+radius);
}
    public B(){
    System.out.println("B constructor");------------------------2  这就输出的第一句
    draw();                                                --------------------------3 这里本来是要调用B类的draw方法的  也就是应该是10  但是虚拟机发现这个方法已经被A覆写了 所以会执行A的方法
    }
}
public class A extends B{
    private int radius = 1;
    public void draw(){
    System.out.println("A.draw(),radius = "+radius);    --------------4  执行这里的时候 A还没初始化  还是0  要等B初始化完成以后才初始化A   所以结果是0
    }
    public A(int radius){
    this.radius = radius;
    System.out.println("A constructor");
    }
   public static void main(String[] args){
   A a = new A(5);    ---------------------------1  首先从这里开始运行  但是运行以后 虚拟机发现A继承了B类  所以会去初始化B类
   }
}

不知道这样的回答你满意不满意
回复 使用道具 举报
蒋映辉 发表于 2012-7-4 22:29
算了  我给你开小灶 好吧
class B{
    private int radius = 10;

隐藏了super()
回复 使用道具 举报
邵阳 发表于 2012-7-4 22:35
隐藏了super()

哦  原来是这样啊  谢谢指教  也诚心请你多多指出我的不足
回复 使用道具 举报
蒋映辉 发表于 2012-7-4 22:39
哦  原来是这样啊  谢谢指教  也诚心请你多多指出我的不足

4  执行这里的时候 A还没初始化  还是0  要等B初始化完成以后才初始化A   所以结果是0
    }
这个不知道楼主能不能解释一下,为甚么先初始化b,在初始化a。
System.out.println("A.draw(),radius = "+radius);  如果换成别的变量按理该也是零啊。但是你自己检验吧,上边的也变。这道题没那么简单
回复 使用道具 举报
蒋映辉 发表于 2012-7-4 22:39
哦  原来是这样啊  谢谢指教  也诚心请你多多指出我的不足

解答题最重要的是不要,一堆深奥的大理论。而是让别人看懂。这里不是炫耀的,而是帮别人解答问题的。
回复 使用道具 举报
邵阳 发表于 2012-7-4 22:51
4  执行这里的时候 A还没初始化  还是0  要等B初始化完成以后才初始化A   所以结果是0
    }
这个不知道 ...

因为A继承了B  这个问题再纠结下去是不是该去翻教材了?有意思?可能你记住了更书面的说法  好吧
private int radius = 200;
    private int a = 200;
    public void draw(){
            System.out.println("A.draw(),radiusaaa = "+a);
            System.out.println("A.draw(),radius = "+radius);
    }不知道这样的实验行不行 输出的结果一样都是0 你有啥想法可以直接说出来  我从来没说过我的技术有多牛  所以就算难住了我也算不了什么是吧....
回复 使用道具 举报
蒋映辉 发表于 2012-7-4 23:00
因为A继承了B  这个问题再纠结下去是不是该去翻教材了?有意思?可能你记住了更书面的说法  好吧
privat ...


首先对版主说声抱歉,可能让版主误解啦。我是对事不对人。大家都是学技术的,都是抱着一颗严谨的心来的。所以有问题就问,我认为是很必要的。而且是个相互提高的过程。
回复 使用道具 举报
邵阳 发表于 2012-7-4 23:05
首先对版主说声抱歉,可能让版主误解啦。我是对事不对人。大家都是学技术的,都是抱着一颗严谨的心来的。 ...

呵呵 抱歉倒是不用   也谢谢你的大度   不过既然是交流技术  还是很期待在那个问题的帖子看到你的高见.....
回复 使用道具 举报
本帖最后由 邵阳 于 2012-7-4 23:16 编辑
蒋映辉 发表于 2012-7-4 23:10
呵呵 抱歉倒是不用   也谢谢你的大度   不过既然是交流技术  还是很期待在那个问题的帖子看到你的高见... ...


我是真心不懂,才请教啊。而且我不懂得话一定打破沙锅问到底,不过这道题看着简单,但真的不简单。因为我打印出代码就知道整个过程,而且知道为啥是0,因为是默认初始化,但不知道为啥。所以就没解答。要不然技术分就我的啦
回复 使用道具 举报
学习了,谢谢二位了
回复 使用道具 举报
希望大家抱着一个良好的学习态度在论坛上交流技术,基础学好了,在论坛上交流多了,技术分自然会上来。
回复 使用道具 举报
“自己看视频解决不是最快的”,有时候为了一个基础问题将所有东西都翻出来再看一遍,是不是有点......浪费时间啊。在这里问问题是想找一个更快的解决方法。如我以前问的一个问题:instanceof在哪里学的。我就想不起来在哪一个位置了。第二遍看视频的时候,才看到是多态里第8天3课里的。我想说的是所有在这里问基础问题的,不一定都是无聊刷分的。请原谅我在这里的无礼!
回复 使用道具 举报
还是回复下,呵
回复 使用道具 举报
                      对
回复 使用道具 举报
版主帮我加加技术分啦,我回答了问题,问了问题,参与了讨论。
回复 使用道具 举报
支持版主{:soso_e100:}{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马