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

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