Manger [] manager = new Manager [10];
Employee [] staff = manager;
staff[0]= new Employee (''Harry Port",....);
manager[0].setBonus(1000)
为什么说会直接导致manager[0] 引用一个不存在的实例域吗?这个实例域不就是new Employee("Harry port“,....);
staff[0]= new Employee (''Harry Port",....);
staff[0].setBonus(1000) ?
manager和staff指向同一个数组啊,有问题吗
首先纠正你一个错误,父类对象赋值给子类,是需要强制转换的。
知道你说什么 155页那个是吧,就是讲多态的。manager[0].setBonus(1000)
这一句肯定不能用setBonus()这个方法是经理类的方法是吧,那么就只能由经理对象才能调用。父类的对象是不能调用的。你看
那个manager[0]放的是什么,根本不是经理对象。
manager 指向的是 new Manager [10]; staff[]=manager 说明staff[]也指向了 new Manager [10]; 但是staff[0] 指向了new employee(“。。”)
而manager[0] 还是指向的 new Manager()
薄知浅见,有不对之处请大家指正!
我想你说的继承关系应该是:Manager是Employee的子类,那么这一句
staff[0]= new Employee (''Harry Port",....);
的问题就在于把父类对象赋值给子类对象是不可行的:
可以这么简单理解,子类往往有比父类更多的方法属性,把父类赋值给子类,这些方法,属性从何而来呢?
反过来赋值可行,是因为子类信息多,忽略就好了。
首先Employee已经是Manager的子类,那么将父类对象赋值给子类对象时就一定需要强制转换,并且要保证父类对象中的实际引用就是子类对象的类型
否则就会抛出异常,一般对象的强制类型转换之前可以通过通过instance of 对对象的实际引用进行判断。manager和staff确实指向同一个数组,但是
manager和staff的定义类型确是不同的,所以他们共同指向的这个数组中一定能保证是Manager的引用对象,但是不一定是Emlpoyee的引用对象。
书上明明写的是,Employee是Manager的父类