首先有三个类,如下所示
public class Apple { private String appleName; private String appleColor; private String appleProvider; public Apple() { } public void setAppleColor(String appleColor) { this.appleColor = appleColor; } public String getAppleColor() { return appleColor; } public void setAppleName(String appleName) { this.appleName = appleName; } public String getAppleName() { return appleName; } public void setAppleProvider(String appleProvider) { this.appleProvider = appleProvider; } public String getAppleProvider() { return appleProvider; } }
public class BlueApple extends Apple { public BlueApple() { setAppleColor("blue"); } void setBlue(){} }
public class RedApple extends Apple { public RedApple() { setAppleColor("red"); } void setRed(){} }
如果是如下一段代码
RedApple[] redApple = new RedApple[20]; Apple[] apple = redApple; apple[0] = new BlueApple();就会报异常,为什么呢?原因是apple数组和redApple 引用同一块内存,储存的是相同的引用。查了半天资料也没查到权威的解释,根据C++的数组,感觉apple和redApple会先指向同一块内存,两个数组共同对这一块内存修改。所以下面的多态赋值就报异常了。