运行时的类型信息,可以让我们在程序运行的时候发现和使用类型信息
运行时识别对象和类的类型信息:
1.一种是传统的RTTI模式,在编译阶段就已经知道类型信息(类型转换、多态)
abstract class Shape{
void drow(){
System.out.println("画一个"+this);
}
}
class Triangle extends Shape {
@Override
public String toString() {
return "三角形";
}
}
class Square extends Shape{
@Override
public String toString() {
return "方形";
}
}
class Circle extends Shape{
@Override
public 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 告诉我们对象是不是某个特定类型的实例