对于前两个程序,一个父类一个子类,我们如果这样:
public class ForTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Employee e1=new Employee("小张",9800,1998,2,14);
Employee e2=new Employee("小明",99839,2001,5,16);
Manager boss=new Manager("小SB",98319,2001,12,1);
Employee[] staff=new Employee[3];//这个是Employee的数组
staff[0]=e1;
staff[1]=e2;
staff[2]=boss;
Manager[] managers=new Manager[3];//这个是Manager数组
staff=managers;
staff[2]=new Employee("da",32420,1888,5,2);//看这里,出问题了
managers[2].setBonus(2000);//看这里,也出问题了
}
}
为什么说那里出问题了,我们仔细看,经理属于员工,是子类,子类包含的方法函数之类的比父类丰富。在程序中,员工的数组staff=managers,这个地方,程序没有报错,说明这个写法和操作是允许的,但是实际上,还是有问题的。
我们来分析一下,按照我们的想法,经理是员工,staff[3]=manager[3]。“=”号左边是员工,右边是经理,但当我们调用方法时,staff[3].setBonus(300),后者有,前者没有(前者的本质是Employee,已经声明过的,这是不可更改的事实)。这样就会出现,数组空间的混乱。