2017-02-02 2 views
0

Предполагается, что программа рассчитана на 2 счета через 12 и 24 месяца. Это прекрасно работает. Моя проблема заключается в том, что getter/setter для процентной ставки не работает, поэтому, когда процентная ставка сохраняется как 0,1 в частной переменной другого класса, я не могу ее распечатать из основного класса.Объектно-ориентированное программирование, getter не получает личную переменную из другого класса

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

ответ

5

Как компилятор, несомненно, говорит вам, ваш testAccountIntrest класс не есть метод, называемый getInterest(). Так что это само по себе ничего не может сделать в контексте этого класса:

getInterest() 

Однако ваш Account класс делает есть этот метод. И у вас есть два Accountобъекты в этой области видимости:

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

Таким образом, вы можете вызвать этот метод на этих объектах:

account1.getInterest() 

или:

account2.getInterest() 

В принципе, вам должен указать код, на объект, на который вы вызываете метод. Он не может понять это сам по себе.

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()); 
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()); 
Смежные вопросы