为了账号安全,请及时绑定邮箱和手机立即绑定

类的构造函数中有问题

类的构造函数中有问题

慕尼黑的夜晚无繁华 2023-05-10 17:13:32
该程序要求用户输入两次 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.


查看完整回答
反对 回复 2023-05-10
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

这条线

Nursing nursing = new Nursing();

自动调用超类的构造函数,即AbstractTest(). 您不必通过创建对象来显式调用它AbstractTest

因此,只需删除行

AbstractTest abstractTest = new AbstractTest();

如果不删除它,构造函数将运行两次,因此您也必须提供两次输入。


查看完整回答
反对 回复 2023-05-10
?
慕仙森

TA贡献1827条经验 获得超7个赞

当您创建一个Nursing对象时,它隐式空构造调用super无参数构造函数。所以AbstractTest构造函数被调用了两次——一次是在你创建它的对象时,另一次是在你创建一个Nursing对象时。

使用继承创建对象有点复杂,我建议您阅读它。


查看完整回答
反对 回复 2023-05-10
  • 3 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信