簡體   English   中英

從派生類調用重寫方法

[英]Calling Overridden method from derived class

我有兩個從存儲在 ArrayList 中的 Account 類派生的對象。 我正在嘗試使用基本的 for 循環調用覆蓋的方法,但我無法讓它始終如一地工作。

import java.util.ArrayList;
import java.util.Scanner;

public class InheritanceTest 
{

private static class Account
{

    //Constructor
    Account()
    {

    }

    private void processDeposit()
    {


        double deposit = 0;

        System.out.println("Please enter the deposit amount: ");
        deposit = input.nextDouble();

        balance += deposit;     
    }

    private void processWithdrawal()
    {
        double withdrawal = 0;

        System.out.println("Please enter the amount to be drawn from the account: ");
        withdrawal = input.nextDouble();
        balance -= withdrawal;

    }

    public String getAccountName() {
        System.out.println("Creating " + "account, enter name: ");
        accountName = input.nextLine();
        return accountName;
    }

    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }

    public int getAcctID() {
        System.out.println("Your " + "account number is " + acctID);
        return acctID;
    }

    public void setAcctID(int acctID) {
        this.acctID = acctID;
        acctID++;
    }

}

//

 private static class CheckingAccount extends Account
{

    public String getAccountName() {
        System.out.println("Creating checking account, enter name: ");
        accountName = input.nextLine();
        return accountName;
    }

    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }

    private void processWithdrawal()
    {
        double withdrawal = 0;

        System.out.println("Please enter the amount to be drawn from the account: ");
        withdrawal = input.nextDouble();

        if (withdrawal > balance)
        {
            balance -= 10;
            System.out.println("Overdraft fee has been charged");
        } else
            balance -= withdrawal;

    }

}

//

 private static class SavingsAccount extends Account
{

    public String getAccountName() {
        System.out.println("Creating savings account, enter name: ");
        accountName = input.nextLine();
        return accountName;
    }

    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }

    private void processWithdrawal()
    {
        double withdrawal = 0;

        System.out.println("Please enter the amount to be drawn from the account: ");
        withdrawal = input.nextDouble();
        if(withdrawal > balance)
        {
            System.out.println("Insufficient funds");
        } else
        {
            balance -= withdrawal;
        }

    }


    }

//

public static void main(String[] args)
{
    ArrayList<Account> Bank = new ArrayList<Account>();
    CheckingAccount checking1 = new CheckingAccount();
    Bank.add(checking1);
    SavingsAccount savings = new SavingsAccount();
    Bank.add(savings);

    for(int i = 0; i<Bank.size(); i++)
    {
        Bank.get(i).getAccountName();
        Bank.get(i).setAccountName(Bank.get(i).accountName);
        Bank.get(i).getAcctID();
        Bank.get(i).setAcctID(Bank.get(i).acctID);
    }

    for (int i =0; i<Bank.size(); i++)
    {
        System.out.println("Processing Account: " + Bank.get(i).acctID);
        Bank.get(i).processDeposit();
        System.out.println("Balance: " + Bank.get(i).balance);
        Bank.get(i).processWithdrawal();
        System.out.println("Balance: " + Bank.get(i).balance);
        Bank.get(i).processWithdrawal();
        Bank.get(i).displayAccount(Bank.get(i).acctID, Bank.get(i).accountName, Bank.get(i).balance);

    }
}

}

第一個循環調用覆蓋的 getAccountName 方法就好了,但第二個循環似乎只是從基類調用 processWithdrawal 方法。 誰能指出我找出為什么會發生這種情況的方向?

 private void processWithdrawal()

公開

 public void processWithdrawal()

當您想覆蓋一個方法時,即利用動態多態的特性,該方法應該是受保護的/公共的。

私有方法僅限於聲明它的特定類,這不會使覆蓋成為可能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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