![](/img/trans.png)
[英]Is there something wrong with the local class defined withn a constructor body
[英]Something is wrong in a constructor of a class
該程序要求用戶輸入兩次name和employeeId,而只需輸入一次。
我正在嘗試使用name和employeeId實例變量打印一個句子,這些實例變量繼承到名為Nursing的類。 該程序運行良好。 但是,問題在於它要求用戶輸入兩次name和employeeId。
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();
自動調用超類的構造函數AbstractTest()
。 您不必通過創建AbstractTest
對象來顯式調用它
因此,只需刪除行
AbstractTest abstractTest = new AbstractTest();
如果不刪除它,則構造函數將運行兩次,因此您也必須兩次提供輸入。
當您創建一個Nursing
對象時,它的隱式空構造將調用super
no-args構造函數。 因此,調用AbstractTest
構造函數兩次-一次在創建其對象時創建,另一次在創建Nursing
對象時創建。
使用繼承時創建對象有點復雜,建議您繼續閱讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.