Java基础教程之构造器与方法重载(2)
运行结果为:
160
对象最终的初始化值与构建方法中的值一致。因此:
构建方法 > 显式初始值 > 默认初始值
(事实上,所谓的优先级与初始化时的执行顺序有关,我将在以后深入这一点)
方法重载
一个类中可以定义不止一个构造器,比如:
public class Test
{
public static void main(String[] args)
{
Human neZha = new Human(150, "shit");
System.out.println(neZha.getHeight());
}
}
class Human
{
/**
* constructor 1
*/
Human(int h)
{
this.height = h;
System.out.println("I'm born");
}
/**
* constructor 2
*/
Human(int h, String s)
{
this.height = h;
System.out.println("Ne Zha: I'm born, " + s);
}
/**
* accessor
*/
int getHeight()
{
return this.height;
}
int height;
}
运行结果:
Ne Zha: I'm born, shit
150
上面定义了两个构造器,名字都是Human。两个构造器有不同的参数列表。
在使用new创建对象时,Java会根据提供的参数来决定构建哪一个构造器。比如在构建neZha时,我们提供了两个参数: 整数150和字符串"shit",这对应第二个构建方法的参数列表,所以Java会调用第二个构建方法。
在Java中,Java会同时根据方法名和参数列表来决定所要调用的方法,这叫做方法重载(method overloading)。构建方法可以进行重载,普通方法也可以重载,比如下面的breath()方法:
public class Test
{
public static void main(String[] args)
{
Human aPerson = new Human();
aPerson.breath(10);
}
}
class Human
{
/**
* breath() 1
*/
void breath()
{
System.out.println("hu...hu...");
}
/**
* breath() 2
*/
void breath(int rep)
{
int i;
for(i = 0; i < rep; i++) {
System.out.println("lu...lu...");
}
}
int height;
}
运行结果:
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
可以看到,由于在调用的时候提供了一个参数: 整数10,所以调用的是参数列表与之相符的第二个breath()方法。
总结
constructor特征: 与类同名,无返回值
constructor目的: 初始化,初始操作
方法重载: 方法名 + 参数列表 -> 实际调用哪一个方法
- 上一篇:Java基础教程之封装与接口
- 下一篇:Java基础教程之对象的方法与数据成员