?
構(gòu)造器(constructors)或者稱為“構(gòu)造方法”,是在使用操作符new來創(chuàng)建一個對象的時候被調(diào)用的。構(gòu)造器可以被看做是一種特殊的方法(methods)。構(gòu)造器主要有以下三大特點:
一、構(gòu)造器的名字和其所在類的類名必須一樣;
二、構(gòu)造器沒有返回值類型,也不包含void;
三、在調(diào)用構(gòu)造器來創(chuàng)建對象的時候,要使用操作符new;構(gòu)造器起到的作用就是將對象初始化(initializing objects)。
定義一個構(gòu)造器,通常使用以下語句:
public ClassName (parameters)
{
????????//constructor body
}
?
當(dāng)需要從一個類構(gòu)造對象時,可以使用操作符new來對構(gòu)造器進行調(diào)用:
new ClassName (arguments);
一般情況下,一個類會提供一個沒有任何參數(shù)(parameters)的構(gòu)造器,這樣的構(gòu)造器被稱為無參構(gòu)造器(no-arg或no-argument constructor)。
和一般方法一樣,構(gòu)造器也可以重載(overloading)。也就是說,一個類中可以有多個同名的構(gòu)造器,只要它們擁有不同的簽名(signatures)。
當(dāng)且僅當(dāng)一個類中沒有明確定義任何構(gòu)造器的時候,這個類中就隱含定義一個方法體(method body)為空的無參數(shù)構(gòu)造器。
如果一個類中定義有實例變量(instance variables),一般情況下,我們最好在構(gòu)造器中將這些實例變量進行初始化。類中定義的靜態(tài)常量(class constants)則通常在定義的時候就會對其進行初始化。對于原始數(shù)據(jù)類型的實例變量來說,如果沒有在構(gòu)造器中對它們進行初始化,那么它們會有相應(yīng)的默認值。
在子類(subclass)中,關(guān)鍵詞super指代父類(superclass)。當(dāng)需要調(diào)用父類中的構(gòu)造器時,我們可以使用super()和super(arguments)來進行調(diào)用。super()是用來調(diào)用父類中的無參構(gòu)造器;super(arguments)是用來調(diào)用父類中的與參數(shù)匹配的構(gòu)造器。而且,在子類的構(gòu)造器中使用super()或者super(arguments)的時候,這兩個語句都必須出現(xiàn)在子類的構(gòu)造器的第一行。
還需要特別注意的是:即便一個子類的構(gòu)造器中并沒有明確使用super()或者super(arguments)來調(diào)用父類的構(gòu)造器,Java編譯器也會自動地先調(diào)用父類中的無參構(gòu)造器。
最后,我們留一道小題:
public class Father?
{
public Father()
{
System.out.println("Father");
}
}
public class Son extends Father
{
public Son()
{
System.out.println("Son");
}
}
public class Grandson extends Son
{
public Grandson()
{
super();
System.out.println("Grandson");
}
}
上面建立了3個類,如果我們使用下面語句創(chuàng)建一個對象:
Grandson grandson = new Grandson();
請問輸出的結(jié)果是什么?

? 2026. All Rights Reserved. 滬ICP備2023009024號-1