class 的构造函数有问题
Something is wrong in a constructor of a class
这个程序要求用户输入两次姓名和就业编号,而它只需要一次。
我正在尝试使用继承给名为 Nursing 的 class 的 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
删除行
AbstractTest abstractTest = new AbstractTest();
虽然您没有使用该对象,但它正在创建并且 Scanner
正在请求 2 个输入。
Nursing nursing = new Nursing();
就足够了:它将调用其父级的构造函数,即 AbstractTest
.
之一
这一行
Nursing nursing = new Nursing();
自动调用超class的构造函数,即AbstractTest()
。您不必通过创建 AbstractTest
的对象来显式调用它
因此,只需删除行
AbstractTest abstractTest = new AbstractTest();
如果你不删除它,构造函数是运行两次,因此你也必须给出两次输入。
当您创建一个 Nursing
对象时,它隐式空构造调用 super
无参数构造函数。因此 AbstractTest
构造函数被调用两次 - 一次是在创建其对象时,另一次是在创建 Nursing
对象时。
使用继承创建对象有点复杂,我建议您阅读它。
这个程序要求用户输入两次姓名和就业编号,而它只需要一次。
我正在尝试使用继承给名为 Nursing 的 class 的 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
删除行
AbstractTest abstractTest = new AbstractTest();
虽然您没有使用该对象,但它正在创建并且 Scanner
正在请求 2 个输入。
Nursing nursing = new Nursing();
就足够了:它将调用其父级的构造函数,即 AbstractTest
.
这一行
Nursing nursing = new Nursing();
自动调用超class的构造函数,即AbstractTest()
。您不必通过创建 AbstractTest
因此,只需删除行
AbstractTest abstractTest = new AbstractTest();
如果你不删除它,构造函数是运行两次,因此你也必须给出两次输入。
当您创建一个 Nursing
对象时,它隐式空构造调用 super
无参数构造函数。因此 AbstractTest
构造函数被调用两次 - 一次是在创建其对象时,另一次是在创建 Nursing
对象时。
使用继承创建对象有点复杂,我建议您阅读它。