运行时的类型信息,可以让我们在程序运行的时候发现和使用类型信息

运行时识别对象和类的类型信息:

1.一种是传统的RTTI模式,在编译阶段就已经知道类型信息(类型转换、多态)

  1. abstract class Shape{
  2. void drow(){
  3. System.out.println("画一个"+this);
  4. }
  5. }
  6. class Triangle extends Shape {
  7. @Override
  8. public String toString() {
  9. return "三角形";
  10. }
  11. }
  12. class Square extends Shape{
  13. @Override
  14. public String toString() {
  15. return "方形";
  16. }
  17. }
  18. class Circle extends Shape{
  19. @Override
  20. public String toString() {
  21. return "圆形";
  22. }
  23. }
  24. public class Shopas {
  25. public static void main(String[] args) {
  26. List<Shape> objects = Arrays.asList(new Circle(),new Triangle(),new Square());
  27. for (Shape object : objects) {
  28. object.drow();
  29. }
  30. }
  31. }

上述程序,在编译的时候因为有了泛型容器指定了存放的类型,所以确保了保存的对象都是Shape的。而在运行的时候,程序通过RTTI正确的检查了对象的类型,然后将其通过类型转换为Shpae类型。
2.第二种是反射机制。
RTTI本质:多态的用法(父类的引用指向子类的实现)。


RTTI三种方式:

  1. 传统的类型转换,由RTTI确保类型转换的正确性
  2. 代表对象的类型Class对象,通过查询Class对象可以得到运行时所需要的信息
  3. 关键字Instanceod 告诉我们对象是不是某个特定类型的实例