构造函数
定义一个构造函数
类包含构造函数,用于根据类蓝图创建对象。构造函数声明与方法声明类似——但它们使用类名且没有返回类型。例如,Bicycle 类有一个构造函数:
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
要创建名为 myBike 的新 Bicycle 对象,需通过 new 运算符调用构造函数:
Bicycle myBike = new Bicycle(30, 0, 8);
代码 new Bicycle(30, 0, 8) 在内存中为该对象分配空间并初始化其字段。
尽管 Bicycle 类只有一个构造函数,但它也可以拥有其他构造函数,包括无参数构造函数:
public Bicycle() {
gear = 1;
cadence = 10;
speed = 0;
}
代码 Bicycle yourBike = new Bicycle(); 调用无参构造函数创建名为 yourBike 的新 Bicycle 对象。
这两个构造函数本可以声明在 Bicycle 类中,因为它们的参数列表不同。与方法类似,Java平台根据参数列表的数量和类型来区分构造函数。你不能为同一个类编写两个具有相同参数数量和类型的构造函数,因为编译器无法区分它们。这样做会导致编译时错误。
您无需为类提供构造函数,但操作时需谨慎。编译器会为任何未定义构造函数的类自动生成无参默认构造函数。该默认构造函数将调用父类的无参构造函数。此时若父类未提供无参构造函数,编译器将报错,因此必须确认父类存在该构造函数。若类未显式指定父类,则其隐式父类为 Object 类,该类具备无参构造函数。
您可主动调用父类构造函数。本课开篇的 MountainBike 类正是如此操作。此机制将在后续接口与继承章节中详述。
您可在构造函数声明中使用访问修饰符,以控制其他类调用该构造函数的权限。