运行时的类型信息,可以让我们在程序运行的时候发现和使用类型信息
运行时识别对象和类的类型信息:
1.一种是传统的RTTI模式,在编译阶段就已经知道类型信息(类型转换、多态)
abstract class Shape{void drow(){System.out.println("画一个"+this);}}class Triangle extends Shape {@Overridepublic String toString() {return "三角形";}}class Square extends Shape{@Overridepublic String toString() {return "方形";}}class Circle extends Shape{@Overridepublic String toString() {return "圆形";}}public class Shopas {public static void main(String[] args) {List<Shape> objects = Arrays.asList(new Circle(),new Triangle(),new Square());for (Shape object : objects) {object.drow();}}}
上述程序,在编译的时候因为有了泛型容器指定了存放的类型,所以确保了保存的对象都是Shape的。而在运行的时候,程序通过RTTI正确的检查了对象的类型,然后将其通过类型转换为Shpae类型。
2.第二种是反射机制。
RTTI本质:多态的用法(父类的引用指向子类的实现)。
RTTI三种方式:
传统的类型转换,由RTTI确保类型转换的正确性代表对象的类型Class对象,通过查询Class对象可以得到运行时所需要的信息关键字Instanceod 告诉我们对象是不是某个特定类型的实例
