class C1
   {public C1(){System.out.print("1");} }
class C2 extends C1
   {public C2(){System.out.print("2");} }
class C3 extends C2
   {public C3(){System.out.print("3");} }
class C4 extends C3
   {public C4(){System.out.print("4");} }class s310041
{
    public static void main(String [] args)
    {    new  C4 (); }
           
}为何输出是1234 ,有空的看下。这道题目的考点是什么? 考的哪方面的知识?

解决方案 »

  1.   

    主要考构造函数和继承继承的时候子类先执行父类的构造函数,
    如果你把public的方法名改成其他就不会是1234了
    记得给分哦,哈哈
      

  2.   

    考你对继承最基本的理解,
    当你的NEW C4的时候,C3是C4的父类,这时候,C4就拥有了C3的‘特征’,因而,你创建C4的时候,为了能得到C3的‘特征’,你就必须要调用C3的构成函数来得到C3的‘特征’,C3继承C2,C2继承C1也是类似的。
    明白了把?
      

  3.   

    OKOKOK
    兄弟,examine u 构造方法拉,,see??
    考继承方面知识拉
      

  4.   

     这个问题主要是讲发生继承关系时,对象初始化的过程。
    一般这种情况下,有继承关系时对象初始化是按以下顺序进行的: 
    (1) 子类的父类由高到低按顺序初始化静态成员,无论静态成员是否为private。 
    (2) 子类静态成员的初始化。 
    (3) 子类的父类由高到低进行默认构造方法的调用。注意,在调用每一个超类的默认构造 
    方法前,先进行对此超类进行非静态对象的初始化。 
    (4) 子类非静态成员的初始化。 
    (5) 调用子类的构造方法。这里我们可以把C4换一下
    class C4 extends C3 {
    static String str ;
    public C4() {
    System.out.print("4");
    }
    static{
    System.out.println( str );
    str = "C4:str";
    System.out.println( str );
    }
    }那么输出的结果是:
    null
    C4:str
    1234
      

  5.   

    主要是继承,例如:在你写public C2() 这个方法的时候,系统会在面自动调用父类的构造方法,这是隐式调用。如果写全了,应该是:
    super();
    public C2();
    只不过super()是自动调用的
    另外还用到了super的用法,这方面书上面有,自己去看看