Условно переопределяющие методы в java
Итак, я читаю кучу информации из файла о клиентах в классе под названием MonthlyReports. У меня также есть класс Customer и я хочу переопределить метод в нем под названием getTotalFees, и у меня есть два подкласса классов под названием StandardCustomer и PreferredCustomer, где я хочу, чтобы getTotalFees был переопределен. Одна из важных частей информации, которая считывается, является ли клиент предпочтительным или стандартным (который хранится в переменной flag, однако мой проблема в том, что я не знаю, где/как я должен решить, является ли клиент стандартным или предпочтительным.
Вот моя идея, в классе Customer у меня есть абстрактный метод getTotalFees
public double abstract getTotalFees() {
return this.totalFees;
}
Тогда в моих стандартных и предпочтительных классах у меня есть методы, которые переопределяют его
public double getTotalFees() {
if (flag.equals("S"){
return this.totalFees * 5;
} else {
return this.totalFees;
}
}
Я действительно просто хватаюсь за соломинку, поэтому любая помощь будет оценена.
2 ответа:
Похоже, вам нужен фабричный метод (он же "виртуальный конструктор"). Пусть полиморфизм решит эту проблему за вас. Это один из признаков объектно-ориентированного программирования:
public class StandardCustomer extends Customer { // There's more - you fill in the blanks public double getTotalFees() { return 5.0*this.totalFees; } } public class PreferredCustomer extends Customer { // There's more - you fill in the blanks public double getTotalFees() { return this.totalFees; } } public class CustomerFactory { public Customer create(String type) { if ("preferred".equals(type.toLowerCase()) { return new PreferredCustomer(); } else { return new StandardCustomer(); } } }
Если у вас уже есть два разных класса
StandardCustomer
иPreferredCustomer
, Вы можете иметь две разные версии метода://in StandardCustomer: @Override public double getTotalFees() { return this.totalFees * 5; } //in PreferredCustomer: @Override public double getTotalFees() { return this.totalFees; }
Dynamic dispatch в Java заботится о том, чтобы правильный метод был задействован в зависимости от типа среды выполнения экземпляра.