Java方法的重载

Java重载粗略地讲是Java允许多个方法使用同一个方法名。比如

  • 创建一个Printer类用来打印一个字符串,一个或者两个整数。

Printer.java

package method;

public class Printer {

	public void print(String str) {
		System.out.println("Print a string: " + str);
	}

	public void print(int a) {
		System.out.println("Print an integer: " + a);
	}

	public void print(int a, int b) {
		System.out.printf("Print two integers: %d and %d");
	}

}

以上Printer类包含了三个名称同为print的方法,第一个print方法传入一个String参数,第二个传入一个int参数,第三个传入两个int参数,这在Java中是允许的,叫做Java方法的重载

附录: 使用上述Printer类

OverloadExample.java

public class OverloadExample {

	public static void main(String[] args) {
		
		Printer printer = new Printer();
		
		printer.print("A STRING");  // 使用print(String str)方法
		printer.print(10); // 使用print(int a)方法
		printer.print(10, 20);  // 使用print(int a, int b)方法
		
	}

}

重载的本质

  • Java中一个类的方法是由 方法名 + 参数表 唯一确定的!
    • 相同的方法名 + 相同的参数表 被认为是相同的方法;一个类中不允许相同的方法存在
    • 不同方法名:是不同的方法;
    • 相同的方法名,不同的参数表是不同的方法;
      • 上述例子中,三个print方法,第一个的参数表是一个String,第二个是一个int,第三个是两个int,参数表均不同,所以被认为是不同的方法,是允许的。

换言之:如果方法名和参数表都一样,那么就会被认定为是同一个方法,方法是不允许重复定义的,所以Java会报错。

注.
判定两个方法是否相同,跟返回值没有关系!相同的方法名和参数表,不同的返回值是不被允许的!比如下述代码中虽然两个print方法返回值不同,但是会被Java认定为同一个方法,会报错。

package method;

public class Printer {

	public void print(String str) {
		System.out.println("Print a string: " + str);
	}

	public boolean print(String str) {  // Java报错Duplicate method print(String) in type Printer
		System.out.printf("Print a string %s and return a boolean", str);
	}

}