面向对象编程,getter没有从另一个类获取私有变量

时间:2017-02-02 13:52:48

标签: java setter getter

该计划应在12个月和24个月后计算2个账户的利息。这很好用。我的问题是利率的getter / setter不起作用,所以当利率在另一个类私有变量中保存为0.1时,我无法从主类中打印出来。

public class testAccountIntrest{
    //main method
    public static void main(String[] args) {
        //creating objects
        Account account1 = new Account(500);
        Account account2 = new Account(100);


        //printing data
        System.out.println("");
        System.out.println("The intrest paid on account 1 after 12 months is " + account1.computeIntrest(12));
        System.out.println("");
        System.out.println("The intrest paid on account 1 after 24 months is " + account1.computeIntrest(24));
        System.out.println("");
        System.out.println("");
        System.out.println("The intrest paid on account 2 after 12 months is " + account2.computeIntrest(12));
        System.out.println("");
        System.out.println("The intrest paid on account 2 after 24 months is " + account2.computeIntrest(24));
        System.out.println("");
        System.out.println("The intrest rate is " + getIntrest());


        }//end main method
    }//end main class

class Account {
    //instance variables
    private double balance;
    private double intrestRate = 0.1;

    //constructor
    public Account(double initialBalance) {
        balance = initialBalance;
    }

    //instance methods
    public void withdraw(double amount) {
        balance -= amount;
    }
    public void deposit(double amount) {
        balance += amount;
    }
    public double getBalance() {
        return balance;
    }
    public void setIntrest(double rate) {
        intrestRate = rate;
    }

    public double getIntrest() {
        return intrestRate;
    }

    public int computeIntrest(int n) {
        double intrest = balance*Math.pow((1+intrestRate),(n/12));
        return (int)intrest;
    }
}

3 个答案:

答案 0 :(得分:5)

正如编译器无疑告诉你的那样,你的testAccountIntrest 一个名为getInterest()的方法。所以这一点在这个类的上下文中无法做任何事情:

getInterest()

但是,您的Account确实拥有该方法。您在该范围内有两个Account 个对象

Account account1 = new Account(500);
Account account2 = new Account(100);

因此,您可以在这些对象上调用该方法

account1.getInterest()

或:

account2.getInterest()

基本上,您必须告诉代码您正在调用方法的对象。它无法自行解决。

答案 1 :(得分:2)

getIntrest()是会员方法,因此您需要致电

System.out.println("The intrest rate for account 1 is " + account1.getIntrest());
System.out.println("The intrest rate for account 2 is " + account2.getIntrest());

答案 2 :(得分:1)

要从另一个类调用方法,您需要另一个类的对象。

因此,您需要一个帐户实例来呼叫getIntrest。例如:

System.out.println("The intrest rate for account 1 is " + account1.getIntrest());

如果所有帐户的利率相同,您可以将其设为静态:

private static double intrestRate = 0.1;

public static double getIntrest() {
    return intrestRate;
}

静态字段属于该类,您不需要特定的实例来访问它:

System.out.println("The intrest rate for all accounts is " + Account.getIntrest());