该程序要求用户输入两次 name 和 employmentId,而它只需要一次。我正在尝试使用继承到名为 Nursing 的类的 name 和 employmentId 实例变量来打印一个句子。程序运行良好。但是,问题是它需要用户输入两次 name 和 employmentId。AbstractTest.java -import java.util.*;class AbstractTest { String name; int employmentId; AbstractTest (){ //initialize name and employmentId instance variables System.out.println("enter name"); Scanner readString = new Scanner(System.in); this.name = readString.nextLine(); System.out.println("enter ID"); Scanner readInt = new Scanner(System.in); this.employmentId = readInt.nextInt(); } // constructor ends}Nursing.java -class Nursing extends AbstractTest{ void display() { System.out.println("the employment detail: " + "Name: " + name + "ID: " + employmentId); }}Main.java -class Main { public static void main(String[] args) { AbstractTest abstractTest = new AbstractTest(); Nursing nursing = new Nursing(); nursing.display(); }}//它运行良好,但它以某种方式重复输入名称和 ID 两次。它应该只需要一次(下面是 MS DOS 的结果)。输入名字 蝙蝠侠输入 ID 1234输入名字 超人输入 ID 5678就业详情:姓名:超人ID:5678
3 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
删除线
AbstractTest abstractTest = new AbstractTest();
尽管您不使用该对象,但它正在创建并且Scanner
正在请求 2 个输入。
Nursing nursing = new Nursing();
就足够了:它将调用其父级的构造函数,这是AbstractTest
.
明月笑刀无情
TA贡献1828条经验 获得超4个赞
这条线
Nursing nursing = new Nursing();
自动调用超类的构造函数,即AbstractTest()
. 您不必通过创建对象来显式调用它AbstractTest
因此,只需删除行
AbstractTest abstractTest = new AbstractTest();
如果不删除它,构造函数将运行两次,因此您也必须提供两次输入。
慕仙森
TA贡献1827条经验 获得超7个赞
当您创建一个Nursing
对象时,它隐式空构造调用super
无参数构造函数。所以AbstractTest
构造函数被调用了两次——一次是在你创建它的对象时,另一次是在你创建一个Nursing
对象时。
使用继承创建对象有点复杂,我建议您阅读它。
添加回答
举报
0/150
提交
取消