Введение в интерфейсы
Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy. Урок 34 из 87.
Вы уже видели, как abstract классы определяют контракты, которым должны следовать подклассы. Но что, если вы хотите, чтобы class следовал нескольким контрактам? Java не позволяет class наследовать несколько классов, но решает эту проблему с помощью interfaces.
interface — это контракт, который определяет, что может делать класс, не уточняя, как именно он это делает. В отличие от абстрактных классов, interfaces содержат только сигнатуры методов (по умолчанию), без реализации:
public interface Drawable {
void draw();
}
public interface Resizable {
void resize(int width, int height);
}Представляй interface как обещание. Когда class реализует interface, он обещает предоставить реализации для всех methods, объявленных в этом interface. interface определяет способность, а class предоставляет поведение.
Интерфейсы объявляются с использованием ключевого слова interface вместо class. Все methods в интерфейсе implicitly public и abstract, поэтому тебе не нужно писать эти ключевые слова:
public interface Playable {
void play(); // неявно public abstract
void pause();
void stop();
}Интерфейсы также могут declare constants, которые implicitly являются public static final:
public interface GameConstants {
int MAX_PLAYERS = 4; // неявно public static final
}В следующем уроке ты узнаешь, как классы реализуют интерфейсы с помощью ключевого слова implements.
Задание
ЛегкоДавайте создадим систему управления устройствами, определив interfaces, которые описывают, что могут делать разные устройства. Эта задача посвящена созданию interfaces: контрактов, определяющих возможности без указания того, как они работают.
Вы организуете свой код в трёх файлах:
Switchable.java: создайте interface, который определяет, что значит быть переключаемым устройством. Любое переключаемое устройство должно уметь включаться и выключаться. Declare два methods:turnOn()иturnOff(). Remember: methods interface неявно являются public и abstract, поэтому вам нужны только сигнатуры methods.Adjustable.java: создайте ещё один interface, который определяет, что значит быть регулируемым устройством. Регулируемое устройство должно уметь устанавливать свой level. Declare methodsetLevel(int level). Также Include constantMAX_LEVELсо значением100: Remember, что constants в interfaces неявно являютсяpublic static final.Main.java: продемонстрируйте, что ваши interfaces правильно определены, напечатав information о них. Вы получите один input: значение level (int). Выведите следующие три строки:Switchable methods: turnOn, turnOffAdjustable methods: setLevelMax level constant: [MAX_LEVEL value](получите constant из interface Adjustable)
Setting level to: [input level]
Вы получите один input: значение level (int).
Эта задача посвящена исключительно определению interfaces: чертежей, описывающих возможности. В следующем уроке вы узнаете, как классы фактически реализуют эти interfaces, чтобы обеспечить реальное поведение!
Попробуйте сами
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int level = scanner.nextInt();
// TODO: Выведите информацию об интерфейсах
// Print: "Switchable methods: turnOn, turnOff"
// Print: "Adjustable methods: setLevel"
// Print: "Max level constant: " followed by Adjustable.MAX_LEVEL
// Print: "Setting level to: " followed by the input level
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово thisМетодыПоля (атрибуты)Метод-конструкторПерегрузка конструкторовИтоги — Простой калькулятор4Наследование
Основы наследования (extends)Ключевое слово superПереопределение методов (@Override)Цепочка конструкторовКласс ObjectОдиночное и многоуровневое наследованиеПочему нет множественного наследования классовИтоги — Иерархия сотрудников7Специальные методы и класс Object
Метод toString()equals() и hashCode()Метод clone()compareTo() и ComparableИнтерфейс ComparatorПовторение — Кастомная сортировка2Модификаторы доступа и инкапсуляция
Обзор уровней доступаМетоды геттеры и сеттерыСокрытие данныхКлючевое слово finalИтоги — Менеджер банковского счета5Полиморфизм
Основы перегрузки методовПереопределение методов (Run-Time)Upcasting и DowncastingОператор instanceofАбстрактные классы и методыИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияАгрегация против композицииВнутренние, вложенные и анонимные классыEnums и методы перечисленийRecords (Java 16+)Sealed-классы (Java 17+)11Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy3Свойства класса и статические члены
Переменные экземпляра и статические переменныеСтатические методыСтатические блокиКонстанты (static final)Итоги: Счетчик и утилиты6Интерфейсы и абстрактные классы
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовDefault и Static методы в интерфейсахАбстрактные классы vs ИнтерфейсыФункциональные интерфейсыИтоги — Платежная система9Обобщения
Введение в обобщенияОбобщенные классыОбобщенные методыОграниченные параметры типаСимволы подстановки (Wildcards: ?, extends, super)Итоги — Обобщенный контейнер12Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»Паттерн «Итератор»Потренируйтесь самостоятельно: Онлайн-компилятор Java