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

标签 java inheritance arraylist polymorphism

我目前正在学习 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/

相关文章:

java - 添加内容时如何自动调整对话框 Pane 的大小?

java - 将图像、音频和视频保存到 SD 卡

java - 只加入一个实现

python元类继承问题

java - 使用循环输入数组列表

java - 测试字符串是否是字符串列表的覆盖字符串

java - 集合对象无法显示在 java、Arraylist、集合中显示某些未定义值的输出

Windows 忽略 JAVA_HOME : how to set JDK as default?

java - 如何使用 iBatis for Java 实现继承?

java - CMU Sphinx 转录准确性