В данной статье мы рассмотрим приватные методы в интерфейсах.
Вспомним, что начиная с Java 8 мы имеем возможность объявлять в интерфейсах:
- абстрактные методы
 - методы по умолчанию
 - статические методы
 - константные переменные
 
Рассмотрим небольшой пример:
Интерфейс Codealbe:
package net.proselyte.java9.interfaces.java8;
public interface Codeable {
    String JAVA = "Java Language";
    String CPP = "C++ Language";
    
    
    default void doJob() {
        System.out.println("Developer writing code...");
    }
    default void drinkCoffee() {
        System.out.println("Developer drinks coffee...");
        thinkAboutCode();
    }
    static void thinkAboutCode() {
        System.out.println("Developer is thinking about code... ");
    }
}
Класс Developer:
package net.proselyte.java9.interfaces.java8;
public class Developer implements Codeable {
}
Класс DeveloperRunner:
package net.proselyte.java9.interfaces.java8;
public class DeveloperRunner {
    public static void main(String[] args) {
        Developer developer = new Developer();
        developer.doJob();
        developer.drinkCoffee();
        System.out.println(Developer.JAVA);
        System.out.println(Developer.CPP);
    }
}
В результате запуска класса DeveloperRunner мы получим следующий результат:
Developer writing code...
Developer drinks coffee...
Developer is thinking about code... 
Java Language
C++ Language
Process finished with exit code 0
Теперь рассмотрим, что мы имеем касательно интерфейсов, в Java 9.
Начиная с Java 9 мы имеем возможность объявлять в интерфейсах:
- абстрактные методы
 - методы по умолчанию
 - статические методы
 - константные переменные
 - приватные методы
 - приватные статические методы
 
Рассмотрим пример:
Интерфейс Codealbe:
package net.proselyte.java9.interfaces.java9;
public interface Codeable {
    String JAVA = "Java Language";
    String CPP = "C++ Language";
    default void doJob() {
        System.out.println("Developer writing code...");
    }
    default void drinkCoffee() {
        System.out.println("Developer drinks coffee...");
        thinkAboutCode();
        thinkAboutVacation();
        goToTheCinema();
    }
    static void thinkAboutCode() {
        System.out.println("Developer is thinking about code... ");
    }
    private void goToTheCinema() {
        System.out.println("Developer goes to the cinema...");
    }
    private static void thinkAboutVacation() {
        System.out.println("Developer thinks about vacation...");
    }
}
Класс Developer:
package net.proselyte.java9.interfaces.java9;
public class Developer implements Codeable {
}
Класс DeveloperRunner:
package net.proselyte.java9.interfaces.java9;
public class DeveloperRunner {
    public static void main(String[] args) {
        Developer developer = new Developer();
        developer.doJob();
        developer.drinkCoffee();
        System.out.println(developer.JAVA);
        System.out.println(developer.CPP);
    }
}
На этом мы заканчиваем обзор приватных методов в интерфейсах.
В следующей статье мы рассмотрим фабричные методы в Collections API.
 ![]()