java程序中许多对象在运行时都会出现两种类型:编译时类型、运行时类型
编译时类型:由声明该对象时使用的类型决定;
运行时类型:由实际赋给该对象的类型决定。
如:Peron p = new Student();
对象p的编译时类型为Person,但运行时类型为Student,原因如下:
对象p是引用类型,在编译时其类型由Person来确定,但在程序运行的时候,才知道p引用的内容已被修改为Student,所以说p运行时类型为Student
除此之外,程序再运行时还可能接收到外部传入的一个对象,传入的这个对象编译时类型为:Object。编译时无法预知该对象和类可能属于那些类,又需要调用被传入对象运行时类型的方法,这该怎么解决呢?
java程序使用反射机制,依靠运行时信息来发现被传入对象和其对应类的真实信息。
反射机制,使得java“静态”变为“动态”。