理解多态和RTTI

public class ChinesePerson implements Person {

	@Override
	public void say() {
		// TODO Auto-generated method stub
		System.out.println("i am chinese");
	}
	
}
public class JapanPerson implements Person {

	@Override
	public void say() {
		// TODO Auto-generated method stub
		System.out.println("i am Japan");
	}

}

public interface Person {

	public void say();
	
	public default void type() {
		System.out.println("i am a interface");
	}
}

//理解多态
public class TestMain {

	public static void main(String[] args) {
		//存入数组的时候,会自动向上转型为Object,丢失了具体的类型
		//当从数组中取出的时候,(List容器将所有的事物都当做Object持有)
		//会自动将结果转型回Person,这就是RTTI的基本用法
		List<Person> persons = Arrays.asList(new ChinesePerson(),new JapanPerson());
		for(Person person:persons) {
			//这里的person类型是Person而不是Chinese或者是Japan,但是程序会自动执行原有类型的方法上
			//能够通过Person对象执行到子类的具体代码就是又多态来决定的
			//而多态也是使用RTTI,可以查询某个Person引用所指向的对象的确切类型,然后选择性的执行子类的方法
			person.say();
		}
	}
}

多态的实现是依靠rtti(运行时类型检查或者叫后期绑定)
posted @ 2017-07-30 10:26  車輪の唄  阅读(19)  评论(0)    收藏  举报  来源