源代碼如下
import java.util.*;
class super1{
{
System.out.println('super1 ok');
}
super1()
{
System.out.println('3');
}
}
class Employee extends super1{
private String name;
private double salary=1500.00;
private Date birthday;
public Employee(String n,Date DoB){
System.out.println('2');
name=n;
birthday=DoB;
}
public Employee(String n){
this(n,null);
System.out.println('4');
}
}
class Manager extends Employee{
{
System.out.println('Manager ok');
}
private String department;
public Manager(String n,String d){
super(n);
department=d;
}
}
public class test1{
public static void main(String args[]){
new Manager('Smith','sales');
}
}
new Manager('Smith','sales')調用過程:
(1)綁定構造函數參數。其實就是傳遞參數的過程
(2)查看是否有this()語句。沒有。雖然沒有使用this()語句調用構造函數,但是該步驟不能省略
(3)調用super()語句,此時,程序跳轉到Public Employee(String n)。
(4)綁定構造函數參數String n
(5)查看是否有this()。有,則執行構造函數public Employee(String n,Date DoB)
(6)綁定構造函數參數String n,Date DoB
(7)查看是否有this()語句。沒有
(8)執行有系統自動插入的super()語句:執行super1()
(9)執行顯式初始化語句System.out.println('super1 ok');
(10)執行構造函數語句System.out.println('3');
(11)執行顯式初始化語句private double salary=1500.00;
(12)執行構造函數語句System.out.println('2');同時執行name=n;birthday=DoB;
(13)執行構造函數語句System.out.println('4');
(14)執行顯式初始化語句System.out.println('Manager ok');
(15)執行構造函數語句department=d;
幾點總結:
(1)對象是由new運算符創建的,且在任何構造函數執行之前就已經創建完畢了
(2)構造函數的執行總是“向上”的:而且總是先執行完父類的構造函數
(3)在構造函數中,沒有this()語句則由super()語句。沒有this()時,或者自己編寫super(),或者由系統自動調
用 super()
(4)顯式初始化語句總是先於構造函數語句,但後於super()或this()