编译类型和运行类型的概念
Class类是"类的类"(class of classes)。如果说类是对象的抽象和集合的话那么Class類就是对类的抽象和集合。
每一个Class类的对象代表一个其他的类比如下面的程序中,Class类的对象c1代表了Human类c2代表了Woman类。
当我们调用对象的getClass()方法时就得到对应Class对象的引用。
在c2中即使我们将Women对象的引用向上转换为Human对象的引用,对象所指向的Class类对象依然是Woman
Java中每个对象都有相应嘚Class类对象,因此我们随时能通过Class对象知道某个对象“真正”所属的类。无论我们对引用进行怎样的类型转换对象本身所对应的Class对象都昰同一个。当我们通过某个引用调用方法时Java总能找到正确的Class类中所定义的方法,并执行该Class类中的代码由于Class对象的存在,Java不会因为类型嘚向上转换而迷失这就是多态的原理。