class C
{
   int c;
   C(int a)
     {
         c=0;
         for(int i=0;i<=a;i++)
           c+=i;
      }
   C(C b)
    {c=b.c;}
}
class Exam3_3
{
   public static void main(String args[])
     {
         C c1=new C(6);
         C c2=new C(new C(4));
         System.out.println("c1:"+c1.c);
         System.out.println("c2:"+c2.c);
      }
}结果:
c1:21
c2:10
能告诉我  C c2=new C(new C(4));  是如何通过创建对象调用函数的吗?这个语句的调用我看不懂呢?高手帮帮忙啊!!

解决方案 »

  1.   

    C c2 = new C(new C(4));
    创建对象过程:
    1. new C(4) --- 调用C(int a) 创建匿名对象(假设为inner,这个对象是隐含的),经过循环过程(a=4,代入),得到inner.c=10
    2. new C(new C(4))  --- 即new C(inner),构造了一个对象(假设为outer)这是inner.c=10,因为传入的C类型的对象,所以调用第二个构造方法C(C b),此时 outer.c=innert.c,即outer.c=10然后通过 C c2=outer,将对象赋给对象引用c2, over!