Re[7]: Расскажите про интерфейсы
От: _NN_  
Дата: 21.01.19 07:09
Оценка:
Здравствуйте, Kswapd, Вы писали:

_NN>>А чем интерфейс не чистый ?

_NN>>В любом случае определить метод никто не запрещает.

K>Тем, что может содержать не только абстрактные функции. А возможность определения дефолтных методов сводит интерфейс к банальному классу, как в C++. Нарушается чистота дизайна, абстракции "протекают". Наследование реализации вообще зло.


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

Разве нелогично иметь реализацию по умолчанию для некоторых методов ?
Например:
interface Comparable<T>
{
  boolean lessThan(T left, T right) { return !equalsTo(left, right) && !greaterThan(left, right); }
  boolean greaterThan(T left, T right) { return !equalsTo(left, right) && !lessThan(left, right); }
  boolean equalsTo(T left, T right) { return !lessThan(left, right) && !greaterThan(left, right); }
}


Кстати, методы расширения тоже нарушают чистоту ?
interface MyInterface { int G(); }

static class InterfaceExtensions
{
  public static int F(this MyInterface i) { return i.G() + 1; }
}

// ...
MyInterface i;
i.F();
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.