A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马云 中级黑马   /  2012-3-19 14:41  /  1181 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

重载构造方法
当通过new语句创建一个对象时,在不同的条件下,对象可能会有不同的初始化行为。例如对于公司新来的一个雇员,在一开始的时候,有可能他的姓名和年龄是未知的,也有可能仅仅他的姓名是已知的,也有可能姓名和年龄都是已知的。如果姓名是未知的,就暂且把姓名设为“无名氏”,如果年龄是未知的,就暂且把年龄设为-1。
可通过重载构造方法来表达对象的多种初始化行为。例程11-2的Employee类的构造方法有3种重载形式。在一个类的多个构造方法中,可能会出现一些重复操作。为了提高代码的可重用性,Java语言允许在一个构造方法中,用this语句来调用另一个构造方法。
例程11-2 Employee.java
public class Employee {
private String name;
private int age;

/** 当雇员的姓名和年龄都已知,就调用此构造方法 */

public Employee(String name, int age) {

this.name = name;

this.age=age;

}

/** 当雇员的姓名已知而年龄未知,就调用此构造方法 */

public Employee(String name) {

this(name, -1);

}

/** 当雇员的姓名和年龄都未知,就调用此构造方法 */

public Employee() {

this( "无名氏" );

}

public void setName(String name){this.name=name; }

public String getName(){return name; }

public void setAge(int age){this.age=age;}

public int getAge(){return age;}

}

以下程序分别通过3个构造方法创建了3个Employee对象。

Employee zhangsan=new Employee("张三",25);

Employee lisi=new Employee("李四");

Employee someone=new Employee();

在Employee(String name)构造方法中,this(name,-1)语句用于调用Employee(String name,int age)构造方法。在Employee()构造方法中,this("无名氏")语句用于调用Employee(String name)构造方法。

用this语句来调用其他构造方法时,必须遵守以下语法规则。

l 假如在一个构造方法中使用了this语句,那么它必须作为构造方法的第一条语句(不考虑注释语句)。以下构造方法是非法的:

public Employee(){

String name="无名氏";

this(name); //编译错误,this语句必须作为第一条语句

}

l 只能在一个构造方法中用this语句来调用类的其他构造方法,而不能在实例方法中用this语句来调用类的其他构造方法。

l 只能用this语句来调用其他构造方法,而不能通过方法名来直接调用构造方法。以下对构造方法的调用方式是非法的:

public Employee() {

String name= "无名氏";

Employee(name); //编译错误,不能通过方法名来直接调用构造方法

}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马