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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangchao8907 中级黑马   /  2013-8-3 19:41  /  1678 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Super
  2. {
  3.         int i=0;
  4.         public Super(String a)
  5.         {
  6.                 System.out.println("A");
  7.                 i = 1;
  8.         }
  9.         public Super()
  10.         {
  11.                 System.out.println("B");
  12.                 i += 2;
  13.         }
  14. }

  15. class Demo6 extends Super
  16. {
  17.         public Demo6(String a)
  18.         {
  19.                 System.out.println("C");
  20.                 i = 5;
  21.         }
  22.         public static void main(String[] args)
  23.         {
  24.                 int i=4;
  25.                 Super d = new Demo6("A");
  26.                 System.out.println(d.i);
  27.         }
  28. }
复制代码
此题中的构造函数的调用、执行过程是怎么样的?

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
简单来说就是,
调用Demo6(String a)查看所调用的超类构造器 -->找到 Super() -->int i=0 -->System.out.println("B") --> i += 2(此时i的值变为2) --->System.out.println("C") --->i = 5(此时i的值变为5,这里的i是继承来的i值,因为i是包可见的)--->System.out.println(d.i)(输出对应的父类属性,值为5);

输出应该是:
B
C
5
回复 使用道具 举报
class Super
{
        int i=0;
        public Super(String a)
        {
                System.out.println("A");
                i = 1;
        }
        public Super()
        {
                System.out.println("B");
                i += 2;
        }
}
class Demo6 extends Super
{
        public Demo6(String a)
        {
   //这里有一个隐式的super()调用父类中的无参构造方法。
                System.out.println("C");
                i = 5;
        }
        public static void main(String[] args) //程序从 这里开始了。。。
        {
                int i=4;
                Super d = new Demo6("A");//父=子
                System.out.println(d.i);
        }
}
//new Demo06("A")-->public Demo06()-->Super() 从左向右看,代码流程从右向左来看。
//B--> Super.i=2--> C Demo.i=5 上一行执行完的值,输出时打印d.i,对于属性来说,
//是谁的对象就取出谁的值,所以取父类中的。
//最后结果为:
B
C
5
回复 使用道具 举报
在Java中,子类必须调用父类的某个构造方法,如果子类没有指定调用父类的哪个构造方法,系统会隐式地调用父类的无参构造方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马