Java 重载构造函数
接下来,我们准备为大家介绍“重载构造函数”。
首先,我们会提出一个问题,为什么要学习和使用重载构造函数呢?
那么,我们可以举一个例子,例如在一个游戏中,我们定义一个“角色类”,而类中包含有以下的属性,分别是生命值,攻击力(近战),防御力,远程攻击力(即魔法攻击力),这4个属性。
而通过这个“角色类”,我们可以定义出3种不同类型的兵种,分别是步兵,弓箭手,魔法师,而这3种不同类型的兵种它们的攻击方式与防御力都是不一样的,所以,我们具体来分析一下,这样,大家自然就可以了解到为什么要学习和使用重载构造函数了。
(1)魔法师——它是使用魔法的远程攻击,远程攻击力较强,但是,不能适用于近距离作战,所以,它的防御力为0,同时,近战的攻击力也为0,因为,它只能使用魔法,所以,近战与防御这两个属性就不用设置了。所以,在使用“角色类”定义魔法师对象时,类中的构造函数只需要接收2个参数,一个用于定义生命值,一个用于定义远程攻击力,所以,这个构造函数只需要2个参数。
(2)步兵——它只能近距离作战,不能远程攻击,所以,远程攻击力是不能使用,也就不用设置了,所以,在使用“角色类”定义步兵对象时,类中的构造函数只需要接收3个参数,一个用于定义生命值,一个用于定义攻击力,一个用于定义防御力,所以,这个构造函数需要3个参数。
(3)弓箭手——它即可以远程攻击,也可以近距离作战,所以,在使用“角色类”定义步兵对象时,类中的构造函数需要接收4个参数,一个用于定义生命值,一个用于定义攻击力,一个用于定义远程攻击力,一个用于定义防御力,所以,这个构造函数需要4个参数。
所以,通过上面的分析,我们就可以知道,在使用同一个类去定义不同类型的对象时,就可以通过不同参数数量的构造函数(即重载构造函数)去设置类中不同的属性值,而这个就是重载构函数的作用。
接下来,我们就要看看“重载构造函数”的定义形式,其实,它就是我们前面学习的带参构造函数,而有所不同的只是,重载时,在同一个类中,有多个同名,但参数数量不同,或参数的类型不同的构造函数。
接下来,我们将上面分析的例子通过代码实现出来,这样,大家就可以更加清晰地看到重载构造函数的定义形式。
例子:
class Role //定义了角色类Role
{
int Life;//生命值
int Attack;//攻击力
int Defend;//防御力
int Magic; //魔法攻击力(远程攻击)
Role() //默认构造函数
{
}
//整个类中,只这个重载构造函数中有2个参数
Role(int L,int Mag) //重载构造函数(针对魔法师对象定义时使用)
{
//下面2行代码是需要进行赋初化的属性,而2个属性值分别来自于参数L和Mag
Life = L; //设置生命值
Magic = Mag; //设置魔法攻击力
}
//整个类中,只这个重载构造函数中有3个参数
Role(int L,int Ack,int Def) //重载构造函数(针对步兵对象定义时使用)
{
//下面3行代码是需要进行赋初化的属性,而3个属性值分别来自于参数L,Ack以及Def
Life = L; //设置生命值
Attack = Ack; //设置攻击力
Defend = Def; //设置防御力
}
//整个类中,只这个重载构造函数中有4个参数
Role(int L,int Mag,int Ack,int Def) //重载构造函数(针对弓箭手对象定义时使用)
{
//下面3行代码是需要进行赋初化的属性,而3个属性值分别来自于参数L,Mag,Ack以及Def
Life = L; //设置生命值
Magic = Mag; //设置远程攻力
Attack = Ack; //设置攻击力
Defend = Def; //设置防御力
}
}
通过上面的例子我们可以看到,除了默认构造函数以外,其它3个同名的构造函数就是重载构造函数,而它们的特点就是带有不同数量的参数,而如果出现参数的数量相同时,就必须把参数的类型定义为不相同,否则,就会出错。
例如在上面的Role角色类中再定义一个带有两个参数的重载构造函数Role(int L,int Mag) ,这样编译程序时就会出错,所以,我们要将其中一个或全部参数的类型改为不是“整形”,即不是“int”就可以了,例如将第二个参数的类型改为float浮点型,即Role(int L,float Mag)这样,编译就不会出错了。
接下来,我们就通过代码来看看,在定义不同类型的对象时如何使用重载构造函数,代码如下:
Role Mg = Role(10,150);
//上面这行代码通过Role类来定义了Mg对象,代表魔法师,
定义时传递了两个整型参数,10和150,
所以,程序就会到Role类中找到有两个整形参数的构造函数来接收这两个参数,
这样,魔法师对象的生命值就设定为10,而魔法攻击力就设定为150。
Role BuBing = Role (10,50,20 );
//上面这行代码通过Role类来定义了BuBing对象,代表步兵,
定义时传递了三个整型参数,10,50和20,
所以,程序就会到Role类中找到有三个整形参数的构造函数来接收这三个参数,
这样,步兵对象的生命值就设定为10,而攻击力就设定为50,而防御力就设定为20。
非常好,现在,我们已经掌握了Java中的“重载构造函数”这个知识点,但是,如何去运行用它呢?所以,我们就要通过下方的按钮进入到游戏中,然后,运用它去完成任务,这样,才可以加深大家对每个知识点的理解和运用,以及“尽快进入到编程的状态”。
不要停留在理论规则上面,快动起来吧!
(通过游戏模式学习与训练,需要在电脑上运行)