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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ﹎◇waiting﹎ 初级黑马   /  2012-8-3 10:55  /  1591 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么下面程序运行以后那个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

3 个回复

倒序浏览
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
    }
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

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

回复 使用道具 举报
本帖最后由 林康春 于 2012-8-4 01:11 编辑

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


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

QQ截图20120804005818.png

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

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