2017-09-05 48 views
-1

好吧,我知道標題聽起來像是重複的,但我向你保證,我試圖找到類似的問題,但沒有一個看起來很合適。如果你能找到它,請降低這一點並將其鏈接起來,我很樂意刪除它。在Java中調用和鏈接兒童和父母課程

目標很簡單:我想創建一個「銀行賬戶」程序,它接受用戶的輸入,例如銀行賬戶號碼,餘額和類型,根據賬戶類型確定賬戶類型並將其輸出供用戶查看。

我已經創建三個類,如下所示(只有三個爲簡單起見)

1)父類

public class ParentAccount { 
    private String acctNumber; 
    private double balance; 

    public ParentAccount(String acctNumber, double balance){ 
     this.acctNumber = acctNumber; 
     this.balance = balance; 

    } 

    public ParentAccount(){ 
     this.acctNumber = "0"; 
     this.balance = 0; 

    } 


    public String toString(){ 
     return String.format("A/C no:%s, Balance=%.2f", acctNumber, balance); 
    } 
} 

2)在子類「無類型的任意帳戶」

public class CheckingAccount extends ParentAccount { 
    private int limit = 10000; 
    @Override 
    public String toString(){ 
     return "Bank [" + super.toString() + ",limit=" + limit + "]"; 

    } 
} 

3)主執行類

'一個檢查類型的帳戶'

例如:

I輸入銀行A/C作爲11234,平衡爲100,類型檢查

輸出:銀行A/C:0餘額:0極限= 10000

從我可以告訴,代碼似乎採取DEFAULT構造函數在我的父類而不是用戶構造函數,我可以理解爲什麼。

我不能得到的是如何解決這個問題。有什麼建議麼?

+0

您創建一個'ParentAccount'與用戶給出的變量,那麼如果它是一個支票帳戶,你把它扔掉(當然,你忽略它),並創建一個新的空白'CheckingAccount'你然後顯示。 – Kayaman

回答

1

我幾乎想把這叫做打字錯誤,但是你的代碼正在做,正好是你叫它做的。

回想一下,您的ParentAccount構造函數已被重載。它要麼不接受參數。如果它有參數,它會根據需要放入值;如果沒有,它不會打擾。

這對你的孩子也是如此;它實際上是當它被實例化時調用super(),所以你會得到ParentAccount的無參數構造函數。

你需要做的,使這項工作有幾件事情:

  • 添加一個構造函數來CheckingAccount這只是調用父類的構造。

    public CheckingAccount(String acctNumber, double balance) { 
        super(acctNumber, balance); 
    } 
    
  • 正確實例化依賴於類型的CheckingAccount一個實例。

    ParentAccount account; 
    if("Checking".equals(type)) { 
        account = new CheckingAccount(BankAC, BankBalance); 
    } else { 
        account = new ParentAccount(BankAC, BankBalance); 
    } 
    
    System.out.println(account); 
    
+0

完美工作。感謝大家的幫助! – Mack

0

您只有父類的構造函數,如果您希望在創建P1作爲新的checkingAccount對象時再次存儲信息,則還需要爲checkingAccount創建構造函數。

您正在爲P1創建一個新實例,但未傳遞任何值,因此舊值將丟失。

我建議這樣的事情

public CheckingAccount(String acctnumber, double balance){ 
    super(acctnumber, balance); 
} 

,創造P1像

ParentAccount P1 = new CheckingAccount(BancAC, BankBalance); 
0

子類的CheckingAccount只有: 「默認構造函數」

,代碼:

ParentAccount P1 = new CheckingAccount(); 
System.out.println(P1); 

不包含任何數據。