Интерфейсы на практике
Используйте интерфейсы как типы, передавайте их в методы и легко заменяйте реализации. Практикуйтесь в небольших шаблонах гибкого кода.
«Интерфейсы на практике» — бесплатный урок Java Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 3 уроков всего.
Обзор
Интерфейсы на практике: рассматривайте возможности как типы и не связывайте вызывающий код с конкретными классами. Можно передавать интерфейс методу, хранить его в списке и при необходимости заменять другой реализацией.
Интерфейс как параметр
Методы становятся гибче, если принимают тип интерфейса в качестве параметра:
- Вызывающий код остаётся неизменным.
- Разные классы могут реализовать один и тот же контракт и использоваться одинаково.
- В тесте можно быстро подставить имитацию или заглушку и проверить работу.
Код: возможность Printable
Метод использует контракт Printable, а не конкретный класс; даже если реализации меняются, вызывающий код остаётся тем же.
public class Main {
// 1) Define a tiny capability
static interface Printable { void print(); }
// 2) Two implementations
static class TextDoc implements Printable {
public void print() { System.out.println("[TextDoc] Printing text pages"); }
}
static class Photo implements Printable {
public void print() { System.out.println("[Photo] Printing a photo"); }
}
// 3) A method that depends on capability, not class
static void runJob(Printable p) {
p.print(); // caller does not care which class it is
}
public static void main(String[] args) {
runJob(new TextDoc());
runJob(new Photo());
}
}
Интерфейс как возвращаемый тип
Иногда фабричный метод возвращает интерфейс. Вызывающий код видит только возможности и не обязан знать конкретный класс. Это уменьшает связанность и повышает модульность.
Код: стратегия с Formatter
Один и тот же метод работает с разными реализациями Formatter. Нам удалось изменить поведение, не меняя класс.
public class Main {
// Strategy: different ways to format text
static interface Formatter { String format(String s); }
static class UpperFormatter implements Formatter {
public String format(String s) { return s.toUpperCase(); }
}
static class LowerFormatter implements Formatter {
public String format(String s) { return s.toLowerCase(); }
}
// Uses any Formatter
static String show(String title, Formatter f) {
return title + " -> " + f.format(title);
}
public static void main(String[] args) {
System.out.println(show("Hello", new UpperFormatter()));
System.out.println(show("Hello", new LowerFormatter()));
}
}
Код: список интерфейсов
Массив или список может иметь тип интерфейса. Цикл выполняет один и тот же вызов, а каждый элемент запускает собственную реализацию.
public class Main {
static interface Task { void run(); }
static class EmailTask implements Task { public void run(){ System.out.println("Send email"); } }
static class ReportTask implements Task { public void run(){ System.out.println("Generate report"); } }
static class CleanupTask implements Task { public void run(){ System.out.println("Clean temp files"); } }
public static void main(String[] args) {
Task[] queue = { new EmailTask(), new ReportTask(), new CleanupTask() };
for (int i = 0; i < queue.length; i = i + 1) {
queue[i].run(); // same call, different behavior
}
}
}
Проверка понимания интерфейсов
Быстрая проверка: почему полезно «программировать через интерфейс»?
Повторение
Повторение: использование типа интерфейса для параметров, возвращаемых значений и коллекций делает код гибким. Вы можете заменять реализации и быстро проверять код с помощью имитационных объектов.
Часто задаваемые вопросы
Урок «Интерфейсы на практике» бесплатный?
Да — полный текст урока «Интерфейсы на практике» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 3 уроков всего.
Чему я научусь в уроке «Интерфейсы на практике»?
Используйте интерфейсы как типы, передавайте их в методы и легко заменяйте реализации. Практикуйтесь в небольших шаблонах гибкого кода. Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «Интерфейсы на практике»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Интерфейсы на практике
- Основы обобщений (T, вывод типов)
- Обобщённые методы и классы