构造器(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();
请问输出的结果是什么?
© 2024. All Rights Reserved. 沪ICP备2023009024号-1