静态分派和动态分配

静态分派

静态分派根据静态类型定位方法的分派,典型应用是重载。

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!
	}
}
posted @ 2021-12-07 12:12  Alfie014  阅读(55)  评论(0编辑  收藏  举报