将对象存储在数组中以用于destroyvel和修改实例化对象(Java)

时间:2014-06-19 01:25:40

标签: java arrays object polymorphism

你好我是Java的新手并且在我的大学学习中学习这门课程。我正在做的这个任务都是关于多态的,我们假设有4个对象:2个没有参数,2个带参数。

PersonLocation personLocation = new PersonLocation();
PersonData personData = new PersonData();

PersonLocation personLocationOverloaded = new PersonLocation("Hamilton");
PersonData personDataOverloaded = new PersonData("Frizzle", "289-549-1045");

现在我很确定我做得很好,但下一部分是我很困惑。它要求“将所有对象存储在数组中以便检索和修改实例化对象”。但我不知道该如何解决这个问题。我在想:

PersonLocation[] personLocation = new PersonLocation[4];
PersonData[] personData = new PersonData[4];

但这没有任何意义,因为现在我有8个物体。我想把它们放在一起:

String[] employees = new String[4];
for(int i = 0; i < 2; i++)
{
    employees[i] = personLocation;
}

for(int i = 2; i < 4; i++)
{
    employees[i] = personData;
}

这似乎更有意义,因为我有一个超级类Location和一个子类Data

在正确方向上创建用于检索和修改实例化对象的对象数组的任何指针都会有很大帮助。

1 个答案:

答案 0 :(得分:0)

如果您的教师希望将所有对象都放在SAME数组中,那么您需要依赖Java中的所有对象扩展名为“Object”的超级对象这一事实。因此,在这种情况下,您可以创建一个类型为“Object”的新数组,您可以在其中混合和匹配放入其中的对象(将数据和位置放入其中)。然后,当您循环遍历数组时,可以使用java关键字“instanceof”来检查它是PersonLocation还是PersonData。我写的一个例子如下:

public static void main (String args[]) {

    PersonLocation pl1 = new PersonLocation();
    PersonLocation pl2 = new PersonLocation();
    PersonData pd1 = new PersonData();
    PersonData pd2 = new PersonData();

    Object[] array = new Object[4];
    array[0] = pl1;
    array[1] = pd1;
    array[2] = pl2;
    array[3] = pd2;

    for(Object o : array){
        if(o instanceof PersonLocation){
            PersonLocation tempPersonLocation = (PersonLocation) o;
            System.out.println(tempPersonLocation);
        }
        if(o instanceof PersonData){
            PersonData tempPersonData = (PersonData) o;
            System.out.println(tempPersonData);
        }
    }


}

这给了我输出:

This is PersonLocation
This is PersonData
This is PersonLocation
This is PersonData

如果您有一个公共接口或超类(例如PersonData继承Person或PersonData扩展Person),您可以使用此超类来创建单个数组,例如第一个示例。只需将数组的类型从“Object”更改为您的接口/超类即可。

值得注意的是,在您创建两个数组(每个对象类型一个)的示例中,不需要在每个数组中实例化大小为4,因为每种类型的对象只有2个。相反,您可以使用大小2进行实例化,这将导致总共4个对象,而不是您之前提到的8个对象。其中一个例子是:

public static void main(String args[]) {

    PersonLocation pl1 = new PersonLocation();
    PersonLocation pl2 = new PersonLocation();
    PersonData pd1 = new PersonData();
    PersonData pd2 = new PersonData();

    PersonLocation[] personLocation = new PersonLocation[2];
    PersonData[] personData = new PersonData[2];

    personLocation[0] = pl1;
    personLocation[1] = pl2;
    personData[0] = pd1;
    personData[1] = pd2;

    for (PersonLocation pl : personLocation) {
        System.out.println(pl);
    }

    for (PersonData pd : personData) {
        System.out.println(pd);
    }

}

导致输出:

This is PersonLocation
This is PersonLocation
This is PersonData
This is PersonData

我的猜测是,如果你的导师没有教过你关于超类或关键字的instanceof,他正在寻找类似我所展示的第二个例子的东西。