11.3 再谈构造函数
与其他方法一样,构造函数也可重载,这意味着可提供形参不同的多个构造函数。Java 知道该调用哪个构造函数,这是根据你提供的实参确定的。
一种常见的做法是,在提供一个不接受任何参数的构造函数(如前面的构造函数)的同时,提供一个“值构造函数”,如下:
public Time(int hour, int minute, double second) {this.hour = hour;this.minute = minute;this.second = second;}
这个构造函数所做的只是将形参的值复制到实例变量中。在这个实例中,形参的名称和类型与实例变量相同,因此形参将遮盖(shadow)或者说隐藏实例变量。为将它们区分开来,关键词 this 必不可少。让形参与相应的实例变量同名是一种常见的做法,但并非必须这样。
要调用这个构造函数,必须在运算符 new 后面提供实参。下面的示例创建了一个 Time 对象,这个对象表示的时间为正午前 0.1 秒:
Time time = new Time(11, 59, 59.9);
重载构造函数可提供这样的灵活性,即先创建对象再填充属性或在创建对象本身前收集所有的信息。
一旦掌握构造函数的编写技巧,你就会觉得这样的工作很乏味。只需看一眼实例变量列表就能快速编写出构造函数。事实上,有些 IDE 都能替你生成构造函数。
将前面的代码整合起来,得到如下完整的类定义:
public class Time {private int hour;private int minute;private double second;public Time() {this.hour = 0;this.minute = 0;this.second = 0.0;}public Time(int hour, int minute, double second) {this.hour = hour;this.minute = minute;this.second = second;}}
