gpt4 book ai didi

java - 为什么我的 ArrayList 只打印出最后一个被调用的子类?

转载 作者:行者123 更新时间:2023-12-01 16:42:54 25 4
gpt4 key购买 nike

我目前正在学习 Java 中的多态性,部分作业是创建一个程序,该程序将使用继承和多态性打印出各种子类。我尝试寻找解决方案,但似乎找不到其他人遇到此问题。

下面是一段应该打印 Alex 的代码和Alexa分别。然而,输出却是 Alexa Alexa .

我尝试过使用 Eclipse 进行单步调试,但无法查明错误所在。我现在真的很困惑,过去一周我一直在尝试这个问题,但无济于事。如果这是一个简单的问题,但我无法弄清楚出了什么问题,请原谅我。我非常感谢任何帮助!

import java.util.ArrayList;
public class Human {
protected static String name;

public Human(String name) {
System.out.println("In human constructor");
this.name = name;
}
void greetings() {}

static void print(Human human) {
System.out.println(name);
}

public static void main(String[] args) {
ArrayList<Human> human = new ArrayList<Human>();
human.add(new Man("Alex"));
human.add(new Woman("Alexa"));
for (int i = 0; i < human.size(); i++) {
print(human.get(i));
}
}
}

class Man extends Human {

public Man(String name) {
super(name);
// TODO Auto-generated constructor stub
}

}

class Woman extends Human {

public Woman(String name) {
super(name);
// TODO Auto-generated constructor stub
}

}

最佳答案

这里有一些错误:

  1. name 不应是静态的。您需要为每个创建的实例(对象)提供一个 name 实例。

  2. 您打印了错误的名称。您想要打印传递给 print() 的实例的名称。所以你会想要这样的东西(你会为 name 创建一个 getter 方法):

static void print(Human human) {
System.out.println(human.getName());
}

关于java - 为什么我的 ArrayList 只打印出最后一个被调用的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59950428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com