标签:
java是如何在运行时识别对象和类的信息的呢。主要有两种方式
一 传统的RTTI,假定我们编译时已经知道了所有类型
二 反射,允许我们在运行时发现和使用类的信息
abstract class Shape { void draw() { System.out.println(this + ".draw()"); } abstract public String toString(); } class Circle extends Shape { public String toString() { return "Circle"; } } class Square extends Shape { public String toString() { return "Square"; } } class Triangle extends Shape { public String toString() { return "Triangle"; } } public class Shapes { public static void main(String[] args) { List<Shape> shapeList = Arrays.asList( new Circle(), new Square(), new Triangle() ); for(Shape shape : shapeList) shape.draw(); }
把对象放入shapeList 时,会向上转型;取出元素时,实际上所有事物都当做object持有,会自动将结果转换为shape.
这是RTTI最基本的使用形式,因为在java中,所有类型转换都是在运行时进行正确检查的。在运行时识别一个对象的类型。
14.2 clsss 对象
每个类都有一个Class 对象,在类加载的时候生成(使用类而作的准备工作(1 加载 2 链接 3初始化)),三种方式获得Class对象
1 Class.forName();会初始化
2 A a = new A(); a.getclass();
3 a.class
标签:
原文地址:http://www.cnblogs.com/zhouyanan/p/5769875.html