Как использовать private переменную абстрактного класса?

101
24 октября 2021, 19:00
public abstract class Client {
    public Client(double balance) {
        this.balance = balance;
    }
    private double balance;
    public double getBalance() {return balance;}    
    public void takeMoney(double withdraw){
        balance -= withdraw;
    }
    public void giveMoney(double amount){
        balance += amount;}
    public void printCount(){
        System.out.println(balance);
    }        
}

Первый наследник работает.

public class ClientPerson extends Client {
    public ClientPerson(double balance) {
        super(balance);
    }
}

Но, если переопределять метод, переменную balance в методе не видит. Как cделать этот метод рабочим?

public class ClientCompany extends Client {
    public ClientCompany(double balance) {
        super(balance);
    }
    @Override
    public void takeMoney(double withdraw) {
         balance -= (withdraw * 1.01);
    }
}
Answer 1

У вас же есть интерфейсная часть базового класса, который в свою очередь инкапсулирует свое состояние и имеет некоторое поведение (через свои методы).

Вот и используйте их, иначе зачем они нужны?:

public class ClientCompany extends Client {
    public ClientCompany(double balance) {
        super(balance);
    }
    @Override
    public void takeMoney(double withdraw) {
        super.takeMoney(withdraw * 1.01);        
    }
}

А лучше так (без магии):

public class ClientCompany extends Client {
    private double interestRate = 1.01;
    void setInterestRate(double value) {
        this.interestRate = value;
    }
    double getInterestRate() {
        return this.interestRate;
    } 
    @Override
    public void takeMoney(double withdraw) {
        super.takeMoney(withdraw * this.interestRate);        
    }
}
READ ALSO
Есть ли преимущества в использовании числа вместо типа bool в Posgresql?

Есть ли преимущества в использовании числа вместо типа bool в Posgresql?

Несколько раз встречал в таблицах базы, относящейся к веб-приложению на Java, столбцы, играющие роль флага, но имеющие не привычный тип bool, а smallint...

77
Exception in thread "main" java.util.InputMismatchException. Не могу правильно реализовать if (action.equals("back")){continue;}

Exception in thread "main" java.util.InputMismatchException. Не могу правильно реализовать if (action.equals("back")){continue;}

Похоже ошибка в неправильном использовании if (actionequals("back")){continue;}

272
Как найти сумму чисел из массива в java?

Как найти сумму чисел из массива в java?

Пытаюсь получить сумму всех чисел

246