我在看JAVA核心技术继承这一章时 有一段没看明白,先上代码:Manager[] managers = new Manager[10];Employee[] staff = managers;这样做肯定不会有问题,因为经理也是一名雇员,但是,编译器接受如下操作:staff[0]= new Employee("harry"),书中说 "staff[0]和manager[0]引用的是同一对象,这样操作似乎把每一位雇员都当作经理了,当调用manager[0].setBonus(1000)时,将导致访问一个不存在的实例域,进而扰乱相邻存储空间的内容"ps:setBonus是经理类独有的方法,雇员没有。我的问题是 manager[0].setBonus 为什么会出现上述现象 它不是调用自己类的方法吗?
呵呵 经您提点,现在在看看又明白了,staff[0]被赋值后指向employee对象,
而manager[0]也指向这个对象,调用manager[0].setBonus()时实际上是去employee
类里去找setBonus()方法,employee类没有这个方法 所以出错,我理解的对吗?
saff[0]=new Employee();而非你的方法调用之处。
manager[0].setBonus()有趣呀有趣。谢谢。