【问题标题】:Storing objects in an array for retirevel and modification of instantiated objects (Java)将对象存储在数组中以用于实例化对象的退休和修改(Java)
【发布时间】:2014-06-19 01:25:39
【问题描述】:

您好,我是 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 的子类。

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

【问题讨论】:

  • 在 Java 中,有一个名为 Object 的根类,所有其他类都从该根类继承。所以如果你从你的两个类中向上继承树,你会找到一个共同的祖先类,不一定是 Object 类。
  • 我只是推测,但根据名称...是否有一个常见的Person 接口?
  • @infgeoax - 称为对象的根类?我确实相信有人提到我们的 personTest 是顶级的,并且 personLocation 继承自 personTest 而 personData 将继承自 personTest 和 personLocation。我理解的对吗?
  • @Elliot Frisch - 不,我不相信有这个接口,虽然我可能是错的,我试图理解多态性,但在实验室本身没有提到界面,我相信在下一个实验室。

标签: java arrays object polymorphism


【解决方案1】:

如果您的讲师希望将所有对象都放在同一个数组中,那么您需要依靠 Java 中的所有对象都扩展名为“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),您可以使用这个超类来创建单个数组,例如第一个示例。只需将数组的类型从“对象”更改为您的接口/超类。

还值得注意的是,在您创建两个数组(每个对象类型一个)的示例中,不需要在每个数组中实例化大小为 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 关键字的知识,他正在寻找类似于我展示的第二个示例的内容。

【讨论】:

  • 看起来不错,非常感谢您的解释。我还将阅读该“对象”实例化以及 instanceOf。也感谢您抽出宝贵的时间进行输出。
  • 很高兴能帮到你!
猜你喜欢
  • 2019-11-03
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 2013-11-07
  • 2013-06-07
  • 2015-08-14
  • 2013-03-29
相关资源
最近更新 更多