在Java程序设计中,对象变量是多态的。一个超类变量既可以引用超类对象,也可以引用一个该超类的任何一个子类的对象。反之,不能将一个超类的引用赋予子类变量;
例如:Employee是超类,Manager类则是继承自Employee类的子类;
Manager boss = new Manager(.....);
Employee[] staff = new Employee[3];
staff[0] = boss; //staff[0]与boss引用同一个对象。但staff[0]只能访问Employee类的成员方法,不能访问Manager类特有的成员方法;
Manager m = staff[0]; // ERROR
Manager ma = (Manager) staff[0]; // SUCCESS 但一般不建议这样直接转换,
应与instanceof运算符组合使用:
if( staff[0] instanceof Manager)
{
Manager ma = (Manager) staff[0];
}