静态分派和动态分配
静态分派
静态分派根据静态类型定位方法的分派,典型应用是重载。
package learnjava.test;
/**
*@description 静态分配演示
*/
public class StaticDispatch {
// 超类
static abstract class Human {
}
// 子类Man
static class Man extends Human {
}
// 子类Woman
static class Woman extends Human {
}
// 重载方法1
public void sayHello(Human human) {
System.out.println("hello,human!");
}
// 重载方法2
public void sayHello(Man man) {
System.out.println("hello,man!");
}
// 重载方法3
public void sayHello(Woman woman) {
System.out.println("hello,woman!");
}
public static void main(String[] args) {
Human man = new Man(); // 在这里,Human就是静态类型,Man就是实际类型
Human woman = new Woman(); // 在这里,Human就是静态类型,Woman就是实际类型
StaticDispatch staticDispatch = new StaticDispatch();
staticDispatch.sayHello(man); // 运行结果:hello,human!
staticDispatch.sayHello(woman); // 运行结果:hello,human!
}
}
动态分派
动态分派根据运行时期实际类型来确定方法的分派,典型应用是重写。
package learnjava.test;
/**
*@description 动态分派演示
*/
public class DynamicDispatch {
// 超类Human
static class Human {
protected abstract void sayHello();
}
// 子类Man
static class Man extends Human {
@Override
protected void sayHello() {
System.out.println("hello,man!");
}
}
// 子类Woman
static class Woman extends Human {
@Override
protected void sayHello() {
System.out.println("hello,woman!");
}
}
public static void main(String[] args) {
Human man = new Man();
Human woman = new Woman();
man.sayHello(); // 运行结果:hello,man!
woman.sayHello(); // 运行结果:hello,woman!
}
}