上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.3.1 重载
同一个类中如果同时存在两个以上的方法有同一个名字,在这种情况下,我们说方法被重载了,这个过程被称为方法重载。但虚拟机如何判断到底要使用哪个方法工作呢?
调用重载方法时,Java根据参数列表中参数的个数、参数的数据类型和参数的顺序来表明实际调用的是哪一个方法。因此,重载方法在参数类型和(或)数目方面不能相同。虚拟机遇到一个对重载方法的调用时,它会执行其参数与调用参数相匹配的方法。
【例2-10】 使用类的重载构造方法生成不同的长方形对象,计算各长方形的面积。
class Rectangle{ double length; // 长 double width; // 宽 // 定义三个重载的构造方法 public Rectangle(){ // 无参构造方法 length = 1.0; width = 1.0; } public Rectangle(double length){ // 带参构造方法 this.length = length; this.width = length; } public Rectangle(double length,double width){ 带参构造方法 this.length = length; this.width = width; } public double area(){ // 求长方形的面积 return length * width; } public void display(){ System.out.println("长方形的面积是:" + this.area()); } } public class RectangleDemo{ public static void main (String args[]){ Rectangle rect1=new Rectangle(); // 调用无参构造方法 rect1.display(); Rectangle rect2=new Rectangle(6); // 调用有一个参数的构造方法 rect2.display(); Rectangle rect3=new Rectangle(10,20); // 调用有两个参数的构造方法 rect3.display(); } }
该程序的运行结果如下:
长方形的面积是:1.0 长方形的面积是:36.0 长方形的面积是:200.0
可以看到,在长方形类Rectangle中构造方法Rectangle()被重载了3次。第一个版本没有参数,第二个版本有一个double型参数,第三个版本有两个double型参数。Java编译器根据重载方法调用时提供的实际参数选择执行对应的重载方法。