我目前正在学习 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
}
}
最佳答案
这里有一些错误:
name
不应是静态的。您需要为每个创建的实例(对象)提供一个name
实例。您打印了错误的
名称
。您想要打印传递给print()
的实例的名称
。所以你会想要这样的东西(你会为name
创建一个 getter 方法):
static void print(Human human) {
System.out.println(human.getName());
}
关于java - 为什么我的 ArrayList 只打印出最后一个被调用的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59950428/