我目前正在学习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中删除静态
。
protected String name;
当变量、方法。。。定义为静态
,无需创建对象即可访问它。同时,它在每个对象中具有相同的值。因此,如果修改静态变量,它将保留最后一次修改。
有关更多信息,请查看此链接。
每个人都有自己的名字,不管是男人还是女人。
所以从中删除静态关键字
protected static String name;
这里有几件事是错的:
>
您正在打印错误的name
。您想要打印传递到print()
中的实例的name
。所以您需要这样的东西(您可以为name
创建一个getter方法):
static void print(Human human) {
System.out.println(human.getName());
}
问题内容: 我是新手,我正在尝试调用UISwitch IBAction中要求本地通知的多个函数。我想在某个日期(一年中的每个季度第4、7、10、1个)发送通知。只有第四个季度函数被调用。如何获得全部四个功能?这是我的代码: // UISwitch用于季度通知 //四个季度的功能 问题答案: 我认为您使用的是+ iOS10,并且使用的是UserNotifications框架,对吗? 您的很有可能具有
我正在使用Hibernate JPA运行本机查询并返回结果列表。 我想要获取的结果列表并添加到映射中以供将来处理,但是返回的映射仅包含ResultList中的最后一项。 如何让结果列表在地图中添加多个条目? --编辑-- 预期地图内容: 940 7107877 940 7107664 940 7112778 940 7112479 940 7114678 940 7113504 println输出
问题内容: 我正在尝试将名为 City 的 类的 对象添加到中。这是该类的代码 __ 这是我的 主班 的代码 __ 的结果始终相同,并且似乎 数组列表 仅存储添加到其所有元素中的最后一个对象。 例如,运行程序时得到的结果是: 为什么我得到那个结果?我该如何解决? 提前致谢! 问题答案: 在和变量被标记为。甲构件跨过的所有实例共享,并且因此是一个全局变量。您需要对代码进行几处更改: 将city中的和
问题内容: 为什么我添加到ArrayList中对象只包N个最后一个元素? 问题答案: 此问题有两个典型的原因: 你存储在列表中的对象使用的静态字段 意外将同一对象添加到列表 静态场 如果列表中的对象将数据存储在静态字段中,则列表中的每个对象将看起来是相同的,因为它们具有相同的值。考虑下面的类: 在该示例中,由于声明了,因此在所有实例之间只有一个共享。(请参阅“了解班级成员”教程。) 如果使用以下代
目前控制台打印循环中的所有值,但只需要打印最后一个
我试图在一个Jasper报告中显示多个表,我使用子报告来实现这个功能。但我一直在显示几个子报告。实际上,只显示其中一个(第一个)。 以下是我的主report.jrxml: 下面是subjectSubreport.jrxml: 这是printersSubreport.jrxml: 当我切换子报告时,第一个报告正确显示,另一个报告消失。在JasperSoft Studio中,一切都很好,当我将它们导出