类的构造函数中有问题

该程序要求用户输入两次 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


慕尼黑的夜晚无繁华
浏览 152回答 3
3回答

缥缈止盈

删除线AbstractTest abstractTest = new AbstractTest();尽管您不使用该对象,但它正在创建并且Scanner正在请求 2 个输入。Nursing nursing = new Nursing();就足够了:它将调用其父级的构造函数,这是AbstractTest.

明月笑刀无情

这条线Nursing nursing = new Nursing();自动调用超类的构造函数,即AbstractTest(). 您不必通过创建对象来显式调用它AbstractTest因此,只需删除行AbstractTest abstractTest = new AbstractTest();如果不删除它,构造函数将运行两次,因此您也必须提供两次输入。

慕仙森

当您创建一个Nursing对象时,它隐式空构造调用super无参数构造函数。所以AbstractTest构造函数被调用了两次——一次是在你创建它的对象时,另一次是在你创建一个Nursing对象时。使用继承创建对象有点复杂,我建议您阅读它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java