我试图了解我的代码在 Java 中非法的最后一条语句的基本原理。请参阅下面的评论。
public class Rectangle {
private int height;
private int width;
public Rectangle(int height, int width) {
this.height = height;
this.width = width;
}
}
class ColoredRectangle extends Rectangle {
private String color;
public ColoredRectangle(int height, int width, String color) {
super(height, width);
this.color = color;
}
public String getColor() {
return color;
}
public static void main(String[] args) {
ColoredRectangle blueRectangle = new ColoredRectangle(2, 4, "blue");
Rectangle sameObjectDifferentType = blueRectangle;
((ColoredRectangle) sameObjectDifferentType).getColor(); //Will compile
sameObjectDifferentType.getColor(); //Won't compile
}
}
我知道我不应该使用这种设计,而是使用不同的构造函数。我知道那getColor()是“未在 Rectangle 中定义”。尽管如此,我对这段代码的看法是:sameObjectDifferentType 是对一个既是 Rectangle 又是 ColoredRectangle 对象的引用,因此无论我将引用声明为 Rectangle 还是 ColoredRectangle,我都应该能够访问它的所有成员。那么......为什么Java是这样设计的?
www说
鸿蒙传说
相关分类