黑马程序员技术交流社区

标题: 解读程序 [打印本页]

作者: ﹎◇waiting﹎    时间: 2012-8-3 10:55
标题: 解读程序
为什么下面程序运行以后那个i是等于5呢,不是4呢
class Super
{
    int i=0;
    public Super(String a)
    {
        System.out.print("A");
        i=0;
    }
    public Super()
    {
        System.out.print("B");
        i+=2;
    }
}
class Demo extends Super
{
    public Demo(String a)
    {
        System.out.println("c");
         i=5;
    }
    public static void main(String[] args)
    {
         int i=4;
         Super d=new Demo("A");
         System.out.println(d.i);
         
    }
}
输出结果为Bc
               5
作者: 王冰    时间: 2012-8-3 11:12
class Super
{
    int i=0;
    public Super(String a)
    {
        System.out.print("A");
        i=0;
    }
    public Super()
    {
        System.out.print("B");
        i+=2;
    }
}
class Demo extends Super
{
    public Demo(String a)
    {
         //这里会有一条隐式的super()语句去调用父类中无参的构造函数
        System.out.println("c");
         i=5;
    }
    public static void main(String[] args)
    {
         int i=4;
         Super d=new Demo("A"); //这句运行后会执行子类中的构造方法而不是去执行父类中的构造方法,
                                                  //而子类构造方法中的第一句隐含有super()这条语句会去调用父类中无参的构造方法,、
                                                  //故在这里会先打印B,再打印c
         System.out.println(d.i); //这里调用的是子类构造方法中的i,故这里会打印5
         //System.out.println(i); //这样写才会打印4
    }
}

作者: 包晗    时间: 2012-8-3 22:45
非真实姓名注册论坛用户ID提问,解决问题,不提供任何技术分加分。(非真实姓名发帖,版主和管理人员有权直接关闭贴)
申请论坛改名地址:http://bbs.itheima.com/thread-19719-1-1.html
如果姓名已经有人注册
例如:王鹏 这个ID被注册了,那么你可以改成“黑马-王鹏”“黑马粉-王鹏”“黑马_王鹏”“黑马王鹏”都是可以的!


作者: 林康春    时间: 2012-8-4 01:01
本帖最后由 林康春 于 2012-8-4 01:11 编辑

请看程序的流程图
程序首先加载class的文件Demo
接着进main主函数
由于Demo继承了super, 所以必须先访问默认的super() 打印出B ,同时i变成了3
访问完了之后就返回读自身的 打印出c 把i变成了5
明白了吗
对照图看


QQ截图20120804005818.png (31.64 KB, 下载次数: 22)

QQ截图20120804005818.png





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2