Person是Employer的父類,Employer有個新方法setBonus,代碼如下
Employer[] emprs ={new Employer("張三"),new Employer("李四")};
Person[] ps =emprs;
ps[0] = new Person("小明");//運行時該行報錯ArrayStoreException
emprs[0].setBonus(2000);
書中給出的解釋是要保持數組中的元素對象類型一致,
我不理解的是ps定義的元素的類型是Person,為什麼在這裡不能ps[0] = new Person("小明"),ps[0]不是只是對new Person("小明")的一個引用嗎?他又不是Employer類型,我去給它賦值為Person類型有什麼不可?
另外以上代碼如果不用數組的形式,就是兩個對象這麼操作下,是沒有錯誤的。
可能我以上的理解本身有錯誤,請大家指教指正。
有錯別字,重新說一次:
emprs[0]和 ps[0]這兩個引用都指向了Employer對象,現在你要把ps[0]指向的對象換成person對象,emprs[0]也會同時修改為指向該對象。而emprs[0]是Emloyer對象,這就成了“子類的引用執行父類對象”,這是不可以的。所以報錯。