До Java1.7, к счастью, я использовал интерфейсы для реализации инкапсуляции концепции ООП. Если я хочу скрыть реализацию от конечного пользователя, тогда я передам только интерфейс с ними, и они могут вызвать мой API с помощью этого интерфейса, давайте, например, EJB.В Java 8 интерфейс нарушает концепцию инкапсуляции?
Ну выше была действительна до Java 1.7 теперь Java 8, я могу написать реализацию метода в интерфейсе, а также с default
и static
ключевое слово, например:
public interface Foo {
public abstract int someUnimplementedMethod();
default void printMsg() {
System.out.println("Hello...!");
}
static void sayHello() {
System.out.println("Hello...!");
}
}
это вполне допустимо в Java 1.8 ,
Теперь мой вопрос:
В Java 8 мы пытаемся ввести нечто, называемое частичной инкапсуляцией с
default
иstatic
методом?Я знаю, что некоторые из вас будут спорить, если вы не хотите делиться реализацией, то лучше предоставить реализацию
default
иstatic
в субинтерфейсе и сохранить родительский интерфейс с абстрактным методом, но теперь он не уверен, что если бы я написал интерфейс с абстрактным методом, новичок может написать целую реализацию только в интерфейсе. Поэтому возникает вопрос, а лучше не разрешать реализацию метода в интерфейсе.
Если вы не согласны с моей второй точкой, пожалуйста, предоставьте решение для этого.
Кстати я читал Java documentation, который гласит:
метода по умолчанию позволяет добавлять новые функциональные возможности интерфейсов библиотек и обеспечение бинарной совместимости с кодом, написанным для более старых версий этих интерфейсов.
У вас по-прежнему не может быть полей в интерфейсах, поэтому вы не можете иметь состояние, что также означает, что инкапсуляция действительно не имеет никакого отношения к изменениям интерфейсов. –
@LouisWasserman, пожалуйста, прокомментируйте свой комментарий в разделе ответа или укажите полезные ссылки, что вы подразумеваете под «инкапсуляцией, действительно не имеющей ничего общего с изменениями в интерфейсе», это будет полезно. спасибо .. – Vishrant
Связанный: http://stackoverflow.com/questions/27368432/why-does-java-8-not-allow-non-public-default-methods – shmosel