Java 类的构造函数中存在错误
此程序要求用户输入两次name和employmentId,而只需输入一次 我试图使用name和employmentId实例变量打印一个句子,这些变量被继承到一个名为pathing的类中。程序运行良好。但是,问题是它需要用户输入两次name和employmentId AbstractTest.java-Java 类的构造函数中存在错误,java,constructor,this,Java,Constructor,This,此程序要求用户输入两次name和employmentId,而只需输入一次 我试图使用name和employmentId实例变量打印一个句子,这些变量被继承到一个名为pathing的类中。程序运行良好。但是,问题是它需要用户输入两次name和employmentId AbstractTest.java- import java.util.*; class AbstractTest { String name; int employmentId; AbstractTest
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
}
warning.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
雇佣详情:姓名:SupermanID:5678删除该行
AbstractTest abstractTest = new AbstractTest();
虽然您不使用该对象,但它正在创建中,Scanner
正在请求2个输入
Nursing nursing = new Nursing();
足够了:它将调用其父级的构造函数,该构造函数是AbstractTest
中的一个,删除该行
AbstractTest abstractTest = new AbstractTest();
虽然您不使用该对象,但它正在创建中,Scanner
正在请求2个输入
Nursing nursing = new Nursing();
足够了:它将调用其父级的构造函数,该构造函数是这一行的AbstractTest
之一
Nursing nursing = new Nursing();
自动调用超类的构造函数,即AbstractTest()
。您不必通过创建AbstractTest
因此,只需删除该行即可
AbstractTest abstractTest = new AbstractTest();
如果您不删除它,构造函数将运行两次,因此您也必须给出两次输入 这条线
Nursing nursing = new Nursing();
自动调用超类的构造函数,即AbstractTest()
。您不必通过创建AbstractTest
因此,只需删除该行即可
AbstractTest abstractTest = new AbstractTest();
如果您不删除它,构造函数将运行两次,因此您也必须给出两次输入 创建
对象时,它隐式空构造调用super
no args构造函数。因此,AbstractTest
构造函数被调用了两次——一次是在创建其对象时调用的,另一次是在创建对象时调用的
使用继承时创建对象有点复杂,我建议您仔细阅读。当您创建对象时,它隐式的空构造调用super
无参数构造函数。因此,AbstractTest
构造函数被调用了两次——一次是在创建其对象时调用的,另一次是在创建对象时调用的
使用继承时创建对象有点复杂,我建议您仔细阅读。您应该了解构造函数应该做什么。您也不需要每次希望读取一个值时都创建一个新的Scanner实例您正在创建两个AbstractTest
对象(一个是扩展AbstractTest
)并因此调用AbstractTest
构造函数两次。可能不创建abstractTest
变量?不应该abstractTest
是abstract
@盖伊,我认为这是一种测试,对于一个读者来说,最有可能的是,看看他是否意识到它实际上不是一个抽象类@CalebHyun是的,但是在构造函数中实例化一个扫描器是毫无意义的。通过这种方式,您可以使类仅可由在终端上执行的应用程序使用。如果您想在其他方面使用该类,例如web服务。。。祝你好运。你应该了解构造函数应该做什么。您也不需要每次希望读取一个值时都创建一个新的Scanner实例您正在创建两个AbstractTest
对象(一个是扩展AbstractTest
)并因此调用AbstractTest
构造函数两次。可能不创建abstractTest
变量?不应该abstractTest
是abstract
@盖伊,我认为这是一种测试,对于一个读者来说,最有可能的是,看看他是否意识到它实际上不是一个抽象类@CalebHyun是的,但是在构造函数中实例化一个扫描器是毫无意义的。通过这种方式,您可以使类仅可由在终端上执行的应用程序使用。如果您想在其他方面使用该类,例如web服务。。。祝你好运。我总是忘记super()
隐藏在类的第一行中。谢谢你Prashant。没问题Caleb,继续编码:)我总是忘记super()
隐藏在类的第一行。谢谢你Prashant。没问题Caleb,继续编码:)