Menu
Coddy logo textTech

Реализация нескольких интерфейсов

Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy. Урок 36 из 87.

В отличие от наследования классов, при котором можно расширить только один класс, Java позволяет классу реализовать несколько интерфейсов. Так Java безопасно реализует одну из форм множественного наследования.

Чтобы реализовать несколько интерфейсов, перечислите их после ключевого слова implements, разделив их запятыми:

public interface Drawable {
    void draw();
}

public interface Resizable {
    void resize(int width, int height);
}

public class Rectangle implements Drawable, Resizable {
    private int width, height;
    
    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing rectangle " + width + "x" + height);
    }
    
    @Override
    public void resize(int width, int height) {
        this.width = width;
        this.height = height;
    }
}

class должен implement all methods из каждого interface, который он объявляет. Также можно сочетать наследование с несколькими interfaces:

public class Square extends Shape implements Drawable, Resizable {
    // Необходимо реализовать методы из обоих интерфейсов
    // Также можно использовать унаследованные члены из Shape
}

Эта гибкость позволяет проектировать классы, выполняющие несколько ролей. SmartPhone может реализовывать интерфейсы Callable, Messageable и Browsable, каждый из которых определяет различные возможности, поддерживаемые телефоном.

challenge icon

Задание

Легко

Давайте создадим систему умных устройств, в которой устройства могут обладать несколькими возможностями. Вы создадите SmartTV, который можно включать и выключать, а также управлять его громкостью: это продемонстрирует, как один класс может реализовывать несколько interface, чтобы выполнять разные роли.

Вы распределите код по четырём файлам:

  • Powerable.java: Define interface для устройств, которые можно включать. Он должен объявлять два метода: powerOn() и powerOff(), оба возвращающие void.
  • VolumeControl.java: Define interface для устройств с управлением громкостью. Он должен объявлять метод setVolume(int level), возвращающий void, и метод getVolume(), возвращающий int.
  • SmartTV.java: Create класс, который implements оба interface — Powerable и VolumeControl. Ваш SmartTV должен иметь поле brand (String), поле isOn (boolean, initially false) и поле volume (int, initially 0). Добавьте constructor, принимающий название бренда. Реализуйте все требуемые методы:
    • powerOn() должен устанавливать isOn в значение true и выводить: [brand] TV is now ON
    • powerOff() должен устанавливать isOn в значение false и выводить: [brand] TV is now OFF
    • setVolume(int level) должен обновлять громкость и выводить: [brand] TV volume set to [level]
    • getVolume() должен возвращать текущую громкость
  • Main.java: Объедините всё, чтобы продемонстрировать реализацию нескольких interface. Вы получите два входных значения: название бренда (String) и уровень громкости (int). Create SmartTV с указанным брендом, затем:
    • Вызовите powerOn()
    • Вызовите setVolume() с указанным уровнем
    • Выведите: Current volume: [volume], используя getVolume()
    • Вызовите powerOff()

Вы получите два входных значения: бренд телевизора (String) и уровень громкости (int).

В результате должны быть показаны четыре строки, демонстрирующие, как ваш SmartTV выполняет оба контракта interface. Его можно включать и выключать как любое устройство Powerable, а его громкостью можно управлять как у любого устройства VolumeControl!

REQUIRED OUTPUT FORMAT: [Your translated content here]

Попробуйте сами

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Прочитать входные данные
        String brand = scanner.nextLine();
        int volumeLevel = scanner.nextInt();
        
        // TODO: Создать SmartTV с заданным брендом
        
        // TODO: Вызвать powerOn()
        
        // TODO: Вызвать setVolume() с заданным уровнем
        
        // TODO: Print: Current volume: [volume] using getVolume()
        
        // TODO: Вызвать powerOff()
        
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор Java