首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将变量传递给扩展类和调用方法

将变量传递给扩展类和调用方法
EN

Stack Overflow用户
提问于 2014-09-03 19:18:18
回答 3查看 1.4K关注 0票数 2

我现在完全不知所措。我正在开发一个程序,该程序将显示两个储蓄账户的MonthsAccount #Balance,并在账户利息累积时更新Balance

  • 第一个账户的利息为每月10,002利息,年利率为1.2%。
  • 第二个账户的利息为10,003利息,按季度计,年利息为4%。

为了做到这一点,我必须设计四个单独的类。SavingsAccountSavingsAccountDriverFlexibleSavingsAccountCDSavingsAccountSavingsAccountFlexibleSavingsAccountCDSavingsAccount的父类。SavingsAccountDriver是主要的类。

SavingsAccount中,我有一个在SavingsAccountDriver中调用的方法setAnnualInterestRate()。此方法设置每个帐户的利率。我遇到的问题是将这个值传递给扩展类FlexibleSavingsAccountCDSavingsAccount,以便通过为每个帐户添加利率来更新余额。如果有人能帮我解决这个问题,我会非常感激的。

SavingsAccountDriver

代码语言:javascript
复制
public class SavingsAccountDriver {
    public static void main (String[] args) {
        SavingsAccount saver1 = new SavingsAccount(10002, 2000); //create new SavingsAccount object
        SavingsAccount saver2 = new SavingsAccount(10003, 3000); //create new SavingsAccount object

        saver1.setAnnualInterestRate(.012); //sets AnnualInterestRate for 'saver1' object
        saver2.setAnnualInterestRate(.04); //sets AnnualInterestRate for 'saver2' object

        System.out.println("\nMonthly balances:\n");
        System.out.println("Month " + " Account# " + " Balance " + "      " + " Month " + " Account# " + " Balance ");
        System.out.println("----- " + " -------- " + " ------- " + "      " + " ----- " + " -------- " + " ------- ");


        System.out.println(saver1.getAccountNumber() + " / " + saver1.getBalance() + " / " + saver1.getInterest());
        System.out.println(saver2.getAccountNumber() + " / " + saver2.getBalance() + " / " + saver2.getInterest());

        /*for(int month = 0; month <= 12; month++) {
            switch(month) { // switch that outputs month, account number, and balance for both accounts (Some non-needed cases used to make output look cleaner)
                case 0:
                    System.out.println(month + "      " + saver1.getAccountNumber() + "     " + saver1.getBalance() + "         " + month + "      " + saver2.getAccountNumber() + "     " + saver2.getBalance());
                    break;
                case 4: 
                    saver1.addInterest();
                    //saver2.addInterest();

                    System.out.println(month + "      " + saver1.getAccountNumber() + "     " + saver1.getBalance() + "         " + month + "      " + saver2.getAccountNumber() + "     " + saver2.getBalance());
                    break;
                case 10:
                    saver1.addInterest();
                    //saver2.addInterest();

                    System.out.println(month + "     " + saver1.getAccountNumber() + "     " + saver1.getBalance() + "        " + month + "     " + saver2.getAccountNumber() + "     " + saver2.getBalance());
                    break;
                case 11:
                    saver1.addInterest();
                    //saver2.addInterest();

                    System.out.println(month + "     " + saver1.getAccountNumber() + "     " + saver1.getBalance() + "        " + month + "     " + saver2.getAccountNumber() + "     " + saver2.getBalance());
                    break;
                case 12:
                    saver1.addInterest();
                    //saver2.addInterest();

                    double totalBalance = saver1.getBalance() + saver2.getBalance();
                    System.out.println(month + "     " + saver1.getAccountNumber() + "     " + saver1.getBalance() + "        " + month + "     " + saver2.getAccountNumber() + "     " + saver2.getBalance());
                    break;
                default:
                    saver1.addInterest();
                    //saver2.addInterest();

                    System.out.println(month + "      " + saver1.getAccountNumber() + "     " + saver1.getBalance() + "        " + month + "      " + saver2.getAccountNumber() + "     " + saver2.getBalance());
                    break;
            }
        }*/
    }
}

SavingsAccount

代码语言:javascript
复制
public class SavingsAccount {
    // variables specific to SavingsAccount class
    public double annualInterestRate;
    private final int ACCOUNT_NUMBER;
    public double balance;

    //constructor with account number and balance parameters
    public SavingsAccount(int account_number, double balance) {
        this.ACCOUNT_NUMBER = account_number;
        this.balance = balance;
    }

    //returns account number
    public int getAccountNumber() {
        return this.ACCOUNT_NUMBER;
    }

    //returns balance
    public double getBalance() {
        return this.balance;
    }

    //sets interest rate
    public void setAnnualInterestRate (double interestRate) {
        this.annualInterestRate = interestRate;
    }
}

FlexibleSavingsAccount

代码语言:javascript
复制
public class FlexibleSavingsAccount extends SavingsAccount{

        public FlexibleSavingsAccount(int account_number, double balance) {
            super(account_number, balance);
        }

        //returns interest
        public double getInterest() {
            return annualInterestRate;  
        }
}
EN

回答 3

Stack Overflow用户

发布于 2014-09-03 19:46:01

您可能希望添加getInterest作为抽象方法,并将SavingsAccount声明为抽象类。然后,编译器将调用已知的方法,并在子类中强制提供适当的实现。

票数 0
EN

Stack Overflow用户

发布于 2014-09-03 19:46:30

如果要将getInterest()saver2声明为SavingsAccount类型,则应该在父类SavingsAccount中声明saver1方法。

按照显示的方式,该方法只对声明为FlexibleSavingsAccount的类可用。

由于您将它们声明为SavingsAccount,所以您只能访问该类的方法。

子类可以访问父类的方法,但不能访问父类的方法。

票数 -1
EN

Stack Overflow用户

发布于 2014-09-03 19:47:15

您已经将实例化的储蓄帐户声明为SavingsAccount类型。它们将无法访问getInterest()方法,因为它位于FlexibleSavingsAccount中。

您需要将它们实例化为您希望它们实际成为的实际储蓄帐户:

代码语言:javascript
复制
FlexibleSavingsAccount saver1 = new FlexibleSavingsAccount(10002, 2000); //create new FlexibleSavingsAccount object

现在,saver1将能够访问getInterest()

额外想法:

更好的方法是将父SavingsAccount编码为一个接口。然后您将在这个接口中声明您的getInterest()方法,同时将方法中的细节留给您的子类。

SavingsAccount:

代码语言:javascript
复制
public interface SavingsAccount {
    public int getAccountNumber();
    public double getBalance();
    public void setAnnualInterestRate (double interestRate);
 }

然后实例化您的帐户:

代码语言:javascript
复制
SavingsAccount saver1 = new FlexibleSavingsAccount(10002, 2000); //create new FlexibleSavingsAccount object

注意,这有一个额外的好处,您可以将实例声明为SavingsAccount接口,这对于将来验证代码总是一个好主意。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25652091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档