黑马程序员技术交流社区

标题: 关于构造函数的调用过程 [打印本页]

作者: yangchao8907    时间: 2013-8-3 19:41
标题: 关于构造函数的调用过程
  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. }
复制代码
此题中的构造函数的调用、执行过程是怎么样的?
作者: longlangcx    时间: 2013-8-3 22:15
简单来说就是,
调用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
作者: 施大勇    时间: 2013-8-5 20:00
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

作者: 刘超152    时间: 2013-8-5 22:53
在Java中,子类必须调用父类的某个构造方法,如果子类没有指定调用父类的哪个构造方法,系统会隐式地调用父类的无参构造方法。




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