Перейти к содержимому
На этой странице

Методы интерфейса

Все темы Java Developer

Что такое StringJoiner?

StringJoiner — это класс в Java, введенный в Java 8 в пакете java.util, который используется для построения последовательности символов в виде строки с разделителями. Он предназначен для удобной конкатенации строк с заданным разделителем и опциональным префиксом и суффиксом.

Основные характеристики и методы StringJoiner :
  1. Конструкторы:

    • StringJoiner(CharSequence delimiter): Создает StringJoiner с указанным разделителем.

    • StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix): Создает StringJoiner с указанным разделителем, префиксом и суффиксом.

  2. Методы:

    • add(CharSequence csq): Добавляет строку к последовательности.

    • toString(): Возвращает текущее состояние последовательности в виде строки.

    • length(): Возвращает длину строки, которую вернёт toString(), включая разделители, префикс и суффикс. Это не число добавленных элементов.

    • setEmptyValue(CharSequence emptyValue): Устанавливает значение по умолчанию, которое будет возвращено методом toString(), если последовательность пуста.

  3. Пример использования:

    import java.util.StringJoiner;
    
    public class Main {
        public static void main(String[] args) {
            StringJoiner joiner = new StringJoiner(", ", "[", "]");
            joiner.add("Apple");
            joiner.add("Orange");
            joiner.add("Banana");
    
            String result = joiner.toString();
            System.out.println(result);  // Выведет: [Apple, Orange, Banana]
        }
    }

    В приведенном примере StringJoiner создается с разделителем ", ", префиксом [ и суффиксом ]. Затем к нему добавляются строки "Apple", "Orange" и "Banana", и результат выводится как [Apple, Orange, Banana].


Что такое default-методы интерфейса?

Default методы интерфейса введены в Java 8 и представляют собой методы, которые могут иметь реализацию по умолчанию в интерфейсе. Ранее интерфейсы в Java могли содержать только абстрактные методы (методы без тела), которые требовали реализации в классах, реализующих интерфейс. Default методы изменяют эту концепцию, позволяя добавлять методы с реализацией в интерфейсы.

Основные особенности default методов:
  1. Синтаксис: Default методы объявляются с ключевым словом default перед сигнатурой метода. Они могут иметь тело метода (реализацию).

    Пример:

    public interface MyInterface {
        // Абстрактный метод
        void abstractMethod();
    
        // Default метод с реализацией по умолчанию
        default void defaultMethod() {
            System.out.println("Default implementation of defaultMethod");
        }
    }
  2. Цель: Default методы позволяют добавлять новые методы в существующие интерфейсы без необходимости изменять код всех классов, которые реализуют интерфейс. Это особенно полезно для добавления новой функциональности в интерфейсы после их первоначального определения без нарушения обратной совместимости.

  3. Пример использования:

    public interface Vehicle {
        void start();
    
        default void stop() {
            System.out.println("Stopping the vehicle");
        }
    }
    
    public class Car implements Vehicle {
        @Override
        public void start() {
            System.out.println("Starting the car");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Car car = new Car();
            car.start();  // Выведет: Starting the car
            car.stop();   // Выведет: Stopping the vehicle
        }
    }

    В приведенном примере Vehicle — это интерфейс с методами start() (абстрактный) и stop() (default метод с реализацией). Класс Car реализует интерфейс Vehicle, переопределяя абстрактный метод start(). Метод stop() вызывается на объекте типа Car, используя его реализацию default метода из интерфейса Vehicle.


Что такое static метод интерфейса?

Static метод интерфейса (static method in interfaces) — это метод, который объявлен с модификатором static внутри интерфейса в Java. Эта возможность была введена в Java 8 и является частью расширения функциональности интерфейсов.

Основные характеристики static методов интерфейса:
  1. Синтаксис: Static методы в интерфейсе объявляются как статические методы с реализацией по умолчанию. Они не требуют создания экземпляра интерфейса для их вызова.

    Пример:

    public interface MyInterface {
        // Static метод с реализацией
        static void staticMethod() {
            System.out.println("Static method in interface");
        }
    }
  2. Цель: Static методы интерфейса предоставляют способ организации вспомогательной функциональности, которая связана с интерфейсом, но не зависит от конкретной реализации объектов интерфейса. Они могут быть использованы для утилитарных методов, фабричных методов или любых других операций, которые не требуют доступа к состоянию экземпляра.

  3. Пример использования:

    public interface Calculator {
        // Абстрактный метод
        int calculate(int a, int b);
    
        // Static метод в интерфейсе
        static Calculator getInstance() {
            return (a, b) -> a + b;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            // Вызов static метода интерфейса
            Calculator calculator = Calculator.getInstance();
            int result = calculator.calculate(5, 3);
            System.out.println("Result: " + result);  // Выведет: 8
        }
    }

    В приведенном примере Calculator — это интерфейс с абстрактным методом calculate(int a, int b) и статическим методом getInstance(), который возвращает экземпляр реализации Calculator. Метод getInstance() используется для создания объекта интерфейса без необходимости его конкретной реализации.


Как вызывать static метод интерфейса?

Вызов static метода интерфейса в Java осуществляется напрямую через имя интерфейса, используя точечную нотацию. Это возможно с момента появления static методов в интерфейсах, начиная с Java 8.

Вот как можно вызвать static метод интерфейса:
  1. Через имя интерфейса:

    public interface MyInterface {
        static void staticMethod() {
            System.out.println("Static method in MyInterface");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            // Вызов static метода через имя интерфейса
            MyInterface.staticMethod();
        }
    }
  2. При вызове из другого класса также указывайте имя интерфейса: MyInterface.staticMethod(). Статические методы интерфейса не наследуются реализующими классами.

    public interface MyInterface {
        static void staticMethod() {
            System.out.println("Static method in MyInterface");
        }
    }
    
    public class AnotherClass {
        public static void main(String[] args) {
            // Вызов static метода интерфейса MyInterface
            MyInterface.staticMethod();
        }
    }

Собеседования: Java

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: Java-разработчик, Backend-разработчик на Java. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.