【问题标题】:Method Retrieval and Inheritance Confusion方法检索和继承混淆
【发布时间】:2012-01-14 19:14:29
【问题描述】:

好吧,所以我遇到了很多麻烦,我还在学习 Java,我的书给我设置了一个我在网上发现的常见任务,我坚持的部分是......

我必须创建一个银行账户计划,为账户持有人提供一个储蓄账户(具有利率且无透支功能)和一个支票账户(具有 100 英镑的透支功能且无利息)。

我还没有实现透支,并且只完成了取款和存款功能的一半,但我的问题是利息,我在我的超类中定义了储蓄账户余额和支票账户余额,所以在锻炼时我对储蓄账户类的兴趣我无法引用 savebalance,因为我已将其设为私有。我正在尝试使用 set.name 方法,但我显然做错了......

一个灿烂的笑容,感谢任何可以帮助或提供建议的人!

超类如下:

public class BankDetails
    {
        private String customer;
        private String accountno;
        private double savebalance;
        private double checkbalance;


//Constructor Methods

 public BankDetails(String customerIn, String accountnoIn, double savebalanceIn, double checkbalanceIn)
        {
            customer = customerIn;
            accountno = accountnoIn;
            savebalance = savebalanceIn;
            checkbalance = checkbalanceIn;
        }

      // Get  name
      public String getcustomername()
        {
            return (customer);
        }

      // Get account number
      public String getaccountnumber()
        {
            return (accountno);
        }

       public double getcheckbalanceamount()
        {
            return (checkbalance);
        }

       public double getsavebalanceamount()
        {
            return (savebalance);
        }


public void savewithdraw(double savewithdrawAmountIn)

  {
        savebalance = savebalance - savewithdrawAmountIn;

  }

public void checkwithdraw(double checkwithdrawAmountIn)

  {
        checkbalance = checkbalance - checkwithdrawAmountIn;

  }


 public void savedeposit(double savedepositAmountIn)

  {
        savebalance = savebalance - savedepositAmountIn;

  }

public void checkdeposit(double checkdepositAmountIn)

  {
        checkbalance = checkbalance - checkdepositAmountIn;

  }




    } // End Class BankDetails

子类如下:

    import java.util.*; 

public class Savings extends BankDetails
  {

      private String saveaccount;
      private double interest;


      public Savings(String customerIn, String accountnoIn, float interestIn, 
      String saveaccountIn, double savebalanceIn)
        {


            super (customerIn, accountnoIn, savebalanceIn, interestIn);


            saveaccount = saveaccountIn;
            interest = interestIn;

        }


      public String getsaveaccountno()
       {
           return (saveaccount);
       }

      public double getinterestamount()
       {
           return (interest);
       }


      public void interestamount(String[] args)

       {
           BankDetails.getsavebalanceamount(savebalance);
           interest = (savebalance / 100) * 1.75;


       }


       }

【问题讨论】:

    标签: java class inheritance methods private-methods


    【解决方案1】:

    使用超类的getSaveBalance() 方法来访问余额(这个名字很可疑,因为你有一个储蓄账户类,但把余额放在别处)。

    (目前是getsavebalanceamount(),我假设重命名以符合 Java 约定。)


    我建议在命名 getter 和 setter 时使用一致的 CamelCase,例如 getInterestAmount()getSaveAccountNo() 等。

    我建议不要评论简单的 getter/setter,但如果这样做,请使用 Javadoc 约定,例如:

    /** Returns current savings account balance. */
    public double getSaveBalance() { ... etc ... }
    

    我还建议避免不必要的括号,就像目前在你的 getter 中一样,例如:

    public double getSaveBalance() {
        return saveBalance; // No parens required.
    }
    

    【讨论】:

    • 好的,谢谢,名字可疑??这是我不确定是否也要做的事情,你认为我应该把 savebalance 和 checkbalance 放在适当的子类中,并把提款和存款方法放在它们里面吗,我觉得把它们放在超级类中可能会更好是两个子类都会发生的计算。 (我还在学习 java 以及使事情合乎逻辑哈哈)
    • 对不起,我仍然不确定我是否理解,我以为我在我的子类中使用了我的超类中的 getSaveBalance() 方法? public void interestamount(String[] args) { BankDetails.getsavebalanceamount(savebalance);利息=(储蓄余额/ 100)* 1.75; }
    • @Phil savebalancegetSaveBalance() 不同。一个是在超类中声明private的变量,一个是声明public的方法。
    • @Phil BankDetails 与帐户不同;一个人的银行详细信息可以包括任意数量的账户、账户类型等。举个简单的例子,这可能并不重要——但了解何时、何地以及如何创建类、单独的关注点等是其中之一最重要的事情要弄清楚。
    • 好的,所以我不想在利息方法save balance中引用,我想引用getter方法getsavebalanceamount(),它将返回给我savebalance的值?
    【解决方案2】:

    我建议你这样做,

    interface Account{
      int getAccountNumber();
      float getBalance();
    }
    
    public class SavingAccount implements Account, Interest{
      int accountNumber;
      public int getAccountNumber(){
        return accountNumber;
      }
      float balance;
      public float getBalance(){
        return balance;
      }
      float savingInterestRate;
      public float getInterestRate(){
         return savingInterestRate;
      }
    }
    
    public class CheckingAccount implements Account, OverDraft{
      int accountNumber;
      public int getAccountNumber(){
      return accountNumber;
      }
      float balance;
      public float getBalance(){
        return balance;
      }
    }
    
    interface Interest{
      float getInterestRate();
    }
    
    interface OverDraft{
    ....
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 2012-09-13
      • 2011-12-30
      • 1970-01-01
      • 2011-04-25
      相关资源
      最近更新 更多