理解多态和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(运行时类型检查或者叫后期绑定)

浙公网安备 33010602011771号