Подмена реализации через интерфейс в Java
Если поле имеет тип интерфейса, реализацию можно заменить. Основной класс при этом менять не придется. Сначала опишем интерфейс для вывода текста:
interface Printer {
void print(String text);
}
Сделаем реализацию, которая выводит текст как есть:
class ConsolePrinter implements Printer {
@Override
public void print(String text) {
System.out.println(text);
}
}
Теперь сделаем вторую реализацию. Она добавляет к тексту префикс:
class PrefixPrinter implements Printer {
@Override
public void print(String text) {
System.out.println("post: " + text);
}
}
Класс Post зависит только от интерфейса,
поэтому подходит любая реализация Printer:
class Post {
private String title;
private Printer printer;
Post(String title, Printer printer) {
this.title = title;
this.printer = printer;
}
void printTitle() {
printer.print(title);
}
}
При создании объекта выберем нужную реализацию:
Post post = new Post("News", new PrefixPrinter());
post.printTitle();
Сделайте интерфейс SalaryPrinter и две реализации:
одна выводит число как есть, другая добавляет знак доллара.
Передайте разные реализации в класс Employee
и проверьте, что вывод зарплаты меняется.