2011-02-04 4 views
1

Возможные Дубликаты:
Why does Java allow multiple inheritance from interfaces but not from abstract/concrete classes
Why there is no multiple inheritance in Java, but implementing multiple interfaces is allowedJava: Почему несколько интерфейсов вместо множественного наследования?

Вместо наследования от нескольких классов (которые Java не позволяет), почему мы сказали реализовать несколько интерфейсов, а?

Наверняка точка наследования от нескольких классов наследует их функциональность - если вам нужно вручную повторно вставить функциональность (для каждого класса, расширяющего набор интерфейсов), в чем смысл использования интерфейсов? Нет никакой гарантии, что два класса, реализующих один и тот же набор интерфейсов, будут обладать одинаковой функциональностью - или я чего-то не хватает?

+2

Чтобы сделать 'супер' разумным :) –

+0

@org, обратите внимание, что тот, который вы нашли, сам по себе является дубликатом - я связан в оригинале :-) –

+0

@ Péter Noted :) –

ответ

1

Множественное наследование - это то, что может вызвать множество проблем.

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

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

«Там нет никакой гарантии, что два класса реализации и тот же набор интерфейсов обеспечит такую ​​же функциональность -? Или я что-то не хватает »

О выписке выше:

Каждый метод не должен прилипать к контракту поэтому независимо от того, как вы реализовать его функциональность метода всегда должна быть такой же, если это то, что должен делать. Если он нарушает контракт, это означает, что оно было реализовано неправильно.

0

множественное наследование может привести к циклическому наследованию .. чтобы избежать этого мы будем на основе наследования интерфейса ..

+2

Уход за разъяснением того, что вы подразумеваете под «множественным наследованием, может привести к циклическому наследованию»? Также выполняется одиночное наследование: 'class Foo extends Bar {} class Bar extends Foo {}' –

+0

редактировать "циклическое наследование" -> "проблема с алмазами". действительно использовал неправильный термин. неудобство жалеет .. !!! спасибо за обнаружение, +1 за ваш комментарий! –

+0

Как алмаз «проблема»? – curiousguy

0

Вы должны прочитать о проблеме http://en.wikipedia.org/wiki/Diamond_problem зависимости алмаза и, чтобы избежать этого Java выбрал интерфейсы над расширением нескольких классов

+0

Нет проблемы с алмазом. (И вы можете иметь «бриллиант» с интерфейсами тоже.) – curiousguy

Смежные вопросы