静态分派指的是重载,动态分派指的是重写
静态分派:
public class StaticDispatch {
static abstract class Human{
}
static class Man extends Human{
}
static class Woman extends Human{
}
public static void sayHello(Human guy){
System.out.println("hello,guy!");
}
public static void sayHello(Man guy){
System.out.println("hello,gentlemen!");
}
public static void sayHello(Woman guy){
System.out.println("hello,lady!");
}
public static void main(String[] args) {
Human man=new Man();
Human woman=new Woman();
sayHello(man);
sayHello(woman);
}
}
运行结果如下:hello,guy!hello,guy!
动态分派:
public class DynamicDispatch {
static abstract class Human{
protected abstract void sayHello();
}
static class Man extends Human{
@Override
protected void sayHello() {
System.out.println("man say hello!");
}
}
static class Woman extends Human{
@Override
protected void sayHello() {
System.out.println("woman say hello!");
}
}
public static void main(String[] args) {
Human man=new Man();
Human woman=new Woman();
man.sayHello();
woman.sayHello();
man=new Woman();
man.sayHello();
}
}
运行结果如下:
man say hello!
woman say hello!
woman say hello!