简体   繁体   中英

Object oriented programming, getter is not getting private variable from another class

The program is supposed to calculate interest for 2 accounts after 12 and 24 months. This works fine. My issue is the getter/setter for interest rate do not work, so when the interest rate is saved as 0.1 in another class private variable I can't print it from main class.

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;
    }
}

As the compiler is undoubtedly telling you, your testAccountIntrest class doesn't have a method called getInterest() . So this alone can't do anything in the context of that class:

getInterest()

However, your Account class does have that method. And you have two Account objects in that scope:

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

So you can call that method on those objects :

account1.getInterest()

or:

account2.getInterest()

Basically, you have to tell the code which object you're calling the method on. It can't figure it out on its own.

getIntrest() is a member method, therefore you need to call

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

To call a method from another class you need an object of another class.

So, you need an instance of account to call getIntrest . For example:

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

If an interest rate is the same for all accounts you can make it static:

private static double intrestRate = 0.1;

public static double getIntrest() {
    return intrestRate;
}

Static fields belong to the class and you don't need a specific instance to access it:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM