7.3 构造函数的重载
最后更新于:2022-04-01 14:11:14
这一节我们来学习一下构造函数的重载。
说到重载,我们在函数那一章已经学习过了,为了更好的理解构造函数的重载,我们先要弄明白一个问题:
那就是什么时候定义构造函数呢?
在描述事物时,该事物已存在就具备一些内容,这些内容都定义在构造函数中。
我们来看例子:
~~~
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();
}
}
~~~
结果:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-18_573c41afb95ea.jpg)
此时打印结果为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();
}
}
~~~
我们看到结果:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-18_573c41afcd8c2.jpg)
那么如果我们要使一个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();
}
}
~~~
看一下结果:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-18_573c41afe10d9.jpg)
同理,我们可以定义另外一个构造函数,把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();
}
}
~~~
结果:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-18_573c41aff3aab.jpg)
从上面我们看到,一个类中我们定义了多个构造函数,它们的参数各不相同,这种现象就是构造函数的重载。
通过构造函数的重载,我们可以通过不同的构造函数初始化不同的对象。