静态分派和动态分配
静态分派
静态分派根据静态类型定位方法的分派,典型应用是重载。
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!
	}
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号