public class Test {
public static void main(String[] args) {
Human man = new Man();
Test test = new Test();
test.sayHello(man);
}
public void sayHello (Human guy) {
System.out.println("Human");
}
public void sayHello (Man guy) {
System.out.println("Man");
}
public void sayHello (Woman guy) {
System.out.println("Woman");
}
}
abstract class Human {
}
class Man extends Human {
}
class Woman extends Human {
}
程序的输出结果为 :Human
Human man = new Man();
这里的”Human”称为变量的静态类型(Static Type),或者叫做外观类型(Apparent Type);后面的”Man”则称为变量的实际类型(Actual Type),在方法重载的时候是通过参数的静态类型而不是以实际类型做为依据的,所以这里会调用到参数为的Human的sayHello方法。