2017-02-18 83 views
-1
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?我知道,数组是对象(我不确定它是否相关)。你能解释一下这些语句的逻辑吗?了解对象阵列

+1

在其中创建TwoDShape'对象,然后存储对象的'阵列 - 这是全部 – mic4ael

+1

'shapes [0]'指数组中的单个_entry_,它是一个'TwoDShape'对象。 –

+0

你在这里的代码和'TwoDShape shapes0 = new Triangle(...); TwoDShape shapes1 = new Rectangle(...);',就类型和赋值而言。 –

回答

2

数组是对象。您创建了一个数组对象。

该数组可以保存对其类型的其他对象的引用。并且,当您像这样分配阵列的单个元素时,

shapes[0] = new Triangle("outlined",8.0,12.0); 
shapes[1] = new Rectangle(10); 

将对象分配给数组中的已分配索引。这是可能的,因为超级类型可以容纳的对象Sub类型。

这是一个brief tutorial on Arrays


希望对您有所帮助!

1

TwoDShape是一个超类,它很清楚。现在另一个Triangle和Rectangle是TwoDShape类的实现。

这就是我们能够做到这一点的原因。

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); 
    } 
} 

所以三角和矩形类从TwoDShape类,当你创建A型TwoDShape shapes[] = new TwoDShape[5];的阵列扩展为,所以,你可以使用数组中的对象TriangleTriangle

1

在这个声明TwoDShape shapes[] = new TwoDShape[5];你在说,请为TwoDShape对象创建一个空的5项占位符数组。

然后这个代码:

shapes[0] = new Triangle("outlined",8.0,12.0); 
shapes[1] = new Rectangle(10); 

它指示该地方TwoDShape对象的一个​​实例(在此情况下,可以是TwoDShape,三角波,和矩形),以阵列。

0

您创建了一个TwoDShape类型的名为形状的阵列。所以它可以存储类型的数据TwoDShapeTwoDShape阵列中的给定

然后你存储超级类型的对象TriangleRectangle继承从类TwoDShape