教程(十一)中,了解了Java語言中繼承的基本概念。Java中類與類的繼承 ,是單繼承,主要目的是復用。子類對象可以復用父類中權限允許的屬性和方法 ,所以子類的構造方法和父類的構造方法之間,有一定的調用關系,本文中將進 行詳細介紹。
首先,需要記住一個事實:子類的任何一個構造方法,都將先調用父類某個 構造方法。如子類Trainer中的構造方法:
public Trainer() { }
雖然這個構造方法的方法體中什麼代碼也沒有寫,但是也調用了父類 Employee的構造方法,默認調用的是Employee中無參的構造方法:
public Employee() { }
至於為什麼默認調用的是無參構造方法,後面會有講解。
也就是說,任何一個子類的任何一個構造方法,都必定會調用父類的某個構 造方法,但是到底會調用到哪個構造方法,取決於子類構造方法的寫法。如果子 類構造方法的第一條語句不是super語句,那麼就默認調用父類無參的構造方法 ,如上面展示的代碼。如果Trainer類中有如下構造方法:
public Trainer(String name, double salary, String course) { this.course = course; }
這個構造方法也是先調用的Employee的無參構造方法,因為第一條語句不是 super語句。但是,這個構造方法,顯然是為了初始化name,salary,course,其中 name和salary的初始化可以調用Employee中的這個構造方法進行:
public Employee(String name, double salary) { this.name = name; this.salary = salary; }
如何才能在Trainer的構造方法中,指定先調用Employee的某個構造方法,而 不是默認調用無參的哪?使用super即可。
注意,super語句必須放在第一條語句。
public Trainer(String name, double salary, String course) { super (name, salary); this.course = course; }
總結一下,在繼承中,有關構造方法,有如下幾點需注意:
1、子類的任何構造方法,都會調用父類的某個構造方法。
2、如果子類的構造方法第一條語句不是super語句,那麼就調用父類的無參 的構造方法,與第一條語句寫super()同樣的效果。因此,父類中,最好保留一 個無參的構造方法。
3、在子類構造方法的第一條語句,可以通過寫super語句,可以指定任何一 個需要調用的構造方法,主要通過參數個數和類型區別。了解這些知識點後,初 學者對於繼承中的構造方法應該比較清楚,在接下來的教程中,將逐步了解繼承 中的覆蓋、多態等其他概念。