簡體   English   中英

類的構造函數出了點問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM