牛骨文教育服务平台(让学习变的简单)

这一节我们来学习一下构造函数的重载。

说到重载,我们在函数那一章已经学习过了,为了更好的理解构造函数的重载,我们先要弄明白一个问题:

那就是什么时候定义构造函数呢?

在描述事物时,该事物已存在就具备一些内容,这些内容都定义在构造函数中。

我们来看例子:

class Person
{
	private String name;
	private int age;

	Person()
	{
		System.out.println("person run");
	}

	public void speak()
	{
		System.out.println(name+":"+age);
	}
}

我们来测试一下:

class ConsDemo
{
	public static void main(String[] args) 
	{
		Person p = new Person();//此时调用了构造函数
		p.speak();
	}
}

结果:

此时打印结果为null和0,就是说我们从来没有对成员变量赋过值。

那么当我们想要在创建Person对象时成员变量就有值,可以定义这样的构造函数:

class Person
{
	private String name;
	private int age;

	Person()//构造函数,分别为成员变量name和age赋值
	{
		name = "baby";
		age = 1;
		System.out.println("person run");
	}

	public void speak()
	{
		System.out.println(name+":"+age);
	}
}

测试

class ConsDemo
{
	public static void main(String[] args) 
	{
		Person p = new Person();
		p.speak();
	}
}

我们看到结果:

那么如果我们要使一个Person对象一出生就有名字,那么我们可以定义如下一个构造函数:

class Person
{
	private String name;
	private int age;

	Person()//构造函数,分别为成员变量name和age赋固定的值
	{
		name = "baby";
		age = 1;
		System.out.println("person run");
	}

	Person(String n)//构造函数,有一个初始name参数
	{
		name = n;
	}

	public void speak()
	{
		System.out.println(name+":"+age);
	}
}

我们来测试一下:

class ConsDemo
{
	public static void main(String[] args) 
	{
		Person p = new Person();
		p.speak();
		Person p1 = new Person("旺财");
		p1.speak();
	}
}

看一下结果:

同理,我们可以定义另外一个构造函数,把name和age两个参数同时初始化

class Person
{
	private String name;
	private int age;

	Person()//构造函数,分别为成员变量name和age赋固定的值
	{
		name = "baby";
		age = 1;
		System.out.println("person run");
	}

	Person(String n)//构造函数,有一个初始name参数
	{
		name = n;
	}

	Person(String n,int a)
	{
		name = n;
		age = a;
	}

	public void speak()
	{
		System.out.println(name+":"+age);
	}
}

测试:

class ConsDemo
{
	public static void main(String[] args) 
	{
		Person p = new Person();
		p.speak();
		Person p1 = new Person("旺财");
		p1.speak();
		Person p2 = new Person("小强",10);
		p2.speak();
	}
}

结果:

从上面我们看到,一个类中我们定义了多个构造函数,它们的参数各不相同,这种现象就是构造函数的重载。

通过构造函数的重载,我们可以通过不同的构造函数初始化不同的对象。