多态性带来了一个问题:如何判断一个变量所实际引用的对象的类型。C++使用untime-type information(RTTI),Java使用instanceof操作符。 instanceof 运算符功能:用来判断某个实例变量是否属于某种类的类型。一旦确定了变量所引用的对象的类型后,可以将对象恢复给对应的子类变量,以获取对象的完整功能。
示例如下:
public class Employee extends Object
public class Manager extends Employee
public class Contractor extends Employee
如果通过Employee类型的引用接受一个对象, 它变不变成 Manager或 Contractor 都可以。可以象这样用instanceof 来测试:
public class Employee extends Object
public class Manager extends Employee
public class Contractor extends Employee
public void method(Employee e) {
if (e instanceof Manager) {
//如果雇员是经理,可以做的事情写在这里
}else if (e instanceof Contractor) {
//如果雇员是普通的职员,可以做的事情写在这里
}else {
//说明是临时雇员,可以做的事情写在这里
}
}