关于构造方法的理解不是很清楚,请大家指点。
public   class   Test 
 { 
 	public   static   void   main(String   args[]) 
 	{ 
 		Person   p1   =   new   Person( "A "); 
 		Person   p2   =   new   Person( "B ",    "Shanghai "); 
 		Student   s1   =   new   Student( "C ",    "S1 "); 
 		Student   s2   =   new   Student( "D ",    "Shanghai ",    "S2 "); 
 		System.out.println(p1.info()); 
 		System.out.println(p2.info()); 
 		System.out.println(s1.info()); 
 		System.out.println(s2.info()); 
 	} 
 }   
 class   Person 
 { 
 	private   String   name; 
 	private   String   location;  	 
 	Person(String   name) 
 	{ 
 		this.name   =   name; 
 		location   =    "Beijing "; 
 	}  	 
 	Person(String   name,   String   location) 
 	{ 
 		this.name   =   name; 
 		this.location   =   location; 
 	}  	 
 	public   String   info() 
 	{ 
 		return    "name:    "   +   name   +    "   location:    "   +   location; 
 	} 
 }   
 class   Student   extends   Person 
 { 
 	private   String   school; 
 	Student(String   name,   String   school) 
 	{ 
 		this(name,    "Beijing ",   school); 
 	} 
 	Student(String   n,   String   l,   String   school) 
 	{ 
 		super(n,   l); 
 		this.school   =   school; 
 	} 
 	public   String   info() 
 	{ 
 		return   super.info()   +    "   school:    "   +   school; 
 	} 
 }   
 程序很简单,但是有一点我不明白,就是在初始化子类的时候不是要先调用父类的构造方法吗?如果没有显式调用,那么系统自动调用默认的不带参数的构造方法。可是Student   s1   =   new   Student( "C ",    "S1 ");这句执行的时候它的构造方法中没有显式的调用父类的构造方法,且父类中也没有不带参数的构造方法,那么为什么不会出现错误?不解。
------解决方案--------------------会不会先执行this(name,  "Beijing ", school);这里,然后才会去想父类的构造呢? 
------解决方案--------------------编译器会调用与子类参数相同的基类构造器 
 Student(String n, String l, String school) 
 { 
 super(n, l); 
 this.school = school; 
 } 
 在这之中,由于基类没有这样的构造器,所以你必须显式的调用一个父类构造器,不信你把super去掉。 
 Student(String name, String school) 
 { 
 System.out.println( "AAA "); 
 this(name,  "Beijing ", school); 
 }但在这之中,它执行的时候实际上是这样的 
 Student(String name, String school) 
 { 
 super(name,school); 
 System.out.println( "AAA "); 
 this(name,  "Beijing ", school); 
 } 
 所以为什么你说会调用无参构造器,是因为你的构造器无参,如果你的构造器有参,那也会调用有参构造器 
------解决方案--------------------调试跟踪一下
------解决方案--------------------留名