РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
71 of 1163 menu

Приватный метод интерфейса

Приватный метод интерфейса объявляется с модификатором доступа private внутри интерфейса и доступен только для других методов этого же интерфейса. Приватные методы нельзя вызывать из классов, реализующих интерфейс, и нельзя переопределять. Они появились в Java 9 и используются для вынесения общей логики из default и static методов, чтобы избежать дублирования кода. Приватный метод может быть обычным (нестатическим) или статическим. Обычный приватный метод вызывается из других нестатических методов интерфейса, а статический приватный метод - из статических методов интерфейса.

Синтаксис

private returnType methodName(parameters) { // body } private static returnType methodName(parameters) { // body }

Пример

Давайте создадим интерфейс с приватным методом и вызовем его из default метода:

public class Main { interface Greeter { default void greet(String name) { System.out.println(buildMessage(name)); } private String buildMessage(String name) { return "Hello, " + name + "!"; } } static class SimpleGreeter implements Greeter { } public static void main(String[] args) { SimpleGreeter greeter = new SimpleGreeter(); greeter.greet("abcde"); } }

Результат выполнения кода:

"Hello, abcde!"

Пример

Давайте вынесем общую логику в статический приватный метод и вызовем его из двух static методов интерфейса:

public class Main { interface Calculator { static int sum(int a, int b) { return apply(a, b, "+"); } static int multiply(int a, int b) { return apply(a, b, "*"); } private static int apply(int a, int b, String op) { if (op.equals("+")) { return a + b; } return a * b; } } public static void main(String[] args) { System.out.println(Calculator.sum(2, 3)); System.out.println(Calculator.multiply(2, 3)); } }

Результат выполнения кода:

5 6

Пример

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

public class Main { interface Greeter { private String buildMessage(String name) { return "Hello, " + name + "!"; } } static class SimpleGreeter implements Greeter { public void greet(String name) { // System.out.println(buildMessage(name)); // compile error: buildMessage has private access } } public static void main(String[] args) { System.out.println("abcde"); } }

Результат выполнения кода:

"abcde"

Смотрите также

  • модификатор private,
    который ограничивает доступ к членам класса
  • метод default,
    который имеет реализацию в интерфейсе
  • метод static,
    который принадлежит самому интерфейсу
  • интерфейс interface,
    который задает контракт для классов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить