TwoDShape shapes[] = new TwoDShape[2];
shapes[0] = new Triangle("outlined",8.0,12.0);
shapes[1] = new Rectangle(10);
有一个超类,它是TwoDShape并且有它的子类。(Triangle,Rectangle vs.)我很清楚超类引用可以引用子类object.Yet,我无法理解发生了什么在上面。我们创建了一个shapes
的对象吗?我知道,数组是对象。(我不确定它是否相关......)你能解释一下这些语句的逻辑吗?
答案 0 :(得分:2)
数组是对象。您创建了一个数组对象。
该数组可以保存对其类型的其他对象的引用。当你像这样分配数组的各个元素时,
shapes[0] = new Triangle("outlined",8.0,12.0);
shapes[1] = new Rectangle(10);
将对象分配给数组中已分配的索引。这是可能的,因为 Super Type的引用可以包含 Sub Type的对象。
希望这有帮助!
答案 1 :(得分:1)
TwoDShape 是一个很清楚的超类。现在另一个Triangle和Rectangle是TwoDShape类的实现。
这就是我们能做到这一点的原因。
答案 2 :(得分:1)
你有类似的类设计,如下所示:
class TwoDShape {
}
class Triangle extends TwoDShape {
private String s;
private double s2;
private double s3;
public Triangle(String s, double s2, double s3) {
this.s = s;
this.s2 = s2;
this.s3 = s3;
}
//getters and setter
}
class Rectangle extends TwoDShape {
private int s;
public Rectangle(int s) {
this.s = s;
}
//getters and setter
}
public class Main {
public static void main(String[] args) {
TwoDShape shapes[] = new TwoDShape[5];
shapes[0] = new Triangle("outlined", 8.0, 12.0);
shapes[1] = new Rectangle(10);
}
}
所以Triangle和Rectangle类从TwoDShape类扩展,当你创建一个A TwoDShape shapes[] = new TwoDShape[5];
类型的数组时,你可以在你的Triangle
和Triangle
中使用它们。阵列。
答案 3 :(得分:1)
在此声明中TwoDShape shapes[] = new TwoDShape[5];
您要说的是请为TwoDShape对象创建一个空的5项占位符数组。
然后这个代码:
shapes[0] = new Triangle("outlined",8.0,12.0);
shapes[1] = new Rectangle(10);
它指示将一个TwoDShape对象的实例(在本例中,可以是TwoDShape,Triangle和Rectangle)放置到数组中。
答案 4 :(得分:0)
您创建了一个名为shapes的数组,其类型为TwoDShape
。因此,它可以存储类型 TwoDShape
的数据。
然后,在TwoDShape
和Triangle
继承的情况下,您将超级 类型 Rectangle
的对象存储在数组中/ strong>来自班级TwoDShape