|
|
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
На собеседовании задали вопрос, который поставил меня в тупик: В чем принципиальная разница между абстрактным классом и интерфейсом? По условию они имеют следующие декларации: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 14:39:20 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
jclass, ответ прост - любой класс может наследоваться от любого количества интерфейсов, но только одного класса. Во всем остальном приведенный выше код будет вести себя идентично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 14:42:04 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Добрый день, jclass! > В чем > принципиальная разница между абстрактным классом и интерфейсом? По > условию они имеют следующие декларации: Хотя бы тем, что у интерфейса слова public static final abstract можно опускать. Т.е. получается намного короче и красивее Код: sql 1. 2. 3. 4. 5. Ну и вызов интерфейса работает на пару тактов медленнее. А так- отличий нет, это костыль в отсутствии множественного наследования. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 14:47:20 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
VoDA, Меня сама постановка вопроса смутила, первое что пришло в голову сравнивать эти две сущности, о том, что меня спрашивали о множественном "наследовании" даже в голову не лезло, слишком простой ответ казался :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 14:47:37 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
jclass, класс - это объект. А интерфейс - это контракт или свойство объекта. Например, класс - кисть, и интерфейс - жёсткость её. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 14:49:17 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Petro123класс - это объект. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 14:50:27 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
GKS_Samara, То что, опускать модификаторы можно это понятно, в примере я специально указал, чтобы яснее было, о том, что спрашивали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 14:51:36 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Petro123, Объект - это ЭКЗЕМПЛЯР класса, поробуйте на досуге создать объект абстрактного класса :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 14:52:59 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, :) ну, я не думаю, что в Java и MS определения interface сильно отличаются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 14:54:02 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
jclassPetro123, Объект - это ЭКЗЕМПЛЯР класса, поробуйте на досуге создать объект абстрактного класса :) неужели. Я тебе сказал об объекте Кисть как о философском понятии. Т.е. понимай суть, а не зубрёжку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 14:55:42 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraА так- отличий нет, это костыль в отсутствии множественного наследования. Сравнивать интерфейс и наследование немного неверно. У них разное назначение. Наследование - это расширение свойств и поведения класса. Интерфейс, как уже писал Petro123, это контракт, который класс поддерживает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 15:34:09 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
По-моему вопрос какой-то некорректный если он ставился именно в этой постановке, если спрашивать в общем - то вопрос хороший и тут много чего можно сказать, а в вашем случае с заданными декларациями мягко говоря глупый. Хотя от вас возможно хотели узнать про отличия абстрактного класса и интерфейса а пример просто так привели..хз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 15:38:12 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
забыл никПо-моему вопрос какой-то некорректный +1 в примере (если он полон) они не отличаются ничем, потому что абстрактный класс B не реализует никакого базового функционала и потому бессмыслен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 15:45:31 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
chpashaзабыл никПо-моему вопрос какой-то некорректный +1 в примере (если он полон) они не отличаются ничем, потому что абстрактный класс B не реализует никакого базового функционала и потому бессмыслен. +1 я смотрел на будущее, как на прародителя объектов. Интерфейс же, будет сбоку-припёку. Т.е. разные вещи всё равно. Всё зависит от точки зрения и домысливания ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 15:50:25 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
забыл ник, Ну собствено вопрос "В чем же разница между ними?" еще и на другом примере ставился: Код: java 1. 2. 3. 4. 5. 6. 7. Собственно ответ интервьювера(ов) поразил, оказавается спрашивали про "множественное наследование" интерфейсов, а я как не ищущий простых ответов на дословный вопрос залип на на нем :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 16:02:22 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Добрый день, Dan Black! > Сравнивать интерфейс и наследование немного неверно. У них разное > назначение. Не совсем. Интерфейс- это его публичные методы/свойства. Т.е. у любого класса есть реализуемый им безымянный интерфейс :) > Наследование - это расширение свойств и поведения класса. И интерфейса- тоже. Отличии именно в том, что у интерфейса не может быть реализации. А в скале есть trait, которые как бы и не класс, но и не интерфейс :) -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 16:02:32 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
jclass, ага, типа - чем отличает вырожденное дерево от палки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 16:09:40 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
ах да, у абстрактного класса может быть конструктор по умолчанию который не можем объявить абстрактным:) в отличии от интерфейса. Но ответ ожидали другой, что любой другой класс может реализовать сколь угодно интерфейсов, а ведь вопрос был задан в чем различие между абстрактным классом и интерфейсом при условии аналогичных сигнатур класса. Понятно, что если бы намекнули туда куда клонят, то ответ был бы очевиден, тогда не пришлось бы отвечать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 16:14:37 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Dan BlackНаследование - это расширение свойств и поведения класса. Не обязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 16:29:51 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
jclassDan BlackНаследование - это расширение свойств и поведения класса. Не обязательно. Правильные пацаны обычно обосновывают свой ответ ;) Кроме того, моя цель была не написать полное описание термина наследования, так что хотелось бы в контексте "интерфейс - это костыль в отсутствии множественного наследования." что-нибудь услышать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 16:40:28 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Dan Blackтак что хотелось бы в контексте "интерфейс - это костыль в отсутствии множественного наследования." что-нибудь услышать. зачем? Было много флеймов на данную тему :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 16:45:44 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Petro123Dan Blackтак что хотелось бы в контексте "интерфейс - это костыль в отсутствии множественного наследования." что-нибудь услышать. зачем? Было много флеймов на данную тему :)Согласен, данная подтема официально закрыта :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 16:48:17 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Dan Blackjclassпропущено... Не обязательно. Правильные пацаны обычно обосновывают свой ответ ;) "расширение свойств и поведения класса" это наследование с соблюдением LSP. Можно реализовать наследование не соблюдая LSP. Соостветсвенно: наследование - это "не обязательно" "расширение свойств и поведения класса". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 16:49:29 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz"расширение свойств и поведения класса" это наследование с соблюдением LSP. Можно реализовать наследование не соблюдая LSP. Соостветсвенно: наследование - это "не обязательно" "расширение свойств и поведения класса".Да, вот и получаются в результате такого наследования из ножей танки :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 16:56:49 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Добрый день, Dan Black! > Кроме того, моя цель была не написать полное описание термина > наследования, так что хотелось бы в контексте "интерфейс - это костыль в > отсутствии множественного наследования." что-нибудь услышать. Что услышать? При наличии множественного наследования интерфейс как языковая сущность не нужен. Бритвой отрезает. Понятие "класс" включает в себя интерфейс. PS: интерфейсы в смысле COM немного не в тему. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 17:46:17 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Только не говорите новичку что Classloader видит интерфейсы и классы как.... ОБЪЕКТЫ. Ато у него мозг совсем перегреется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 18:18:22 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraПри наличии множественного наследования интерфейс как языковая сущность не нужен. Бритвой отрезает.ИМХО причина и следствие поменялись местами в высказывании этом Наличие интерфейсов это следствие отказа от множественного наследования. Множественное наследование порождает большие возможности усложнения на пустом месте, потому от них отказались и ввели интерфейсы. Интерфейсы правда тоже не идеал - появились traits ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 23:23:21 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Странно, почему никто не упомянул о том, что интерфейс с абстрактный класс наверняка имеют разную структуру, хотя бы из-за той же таблицы виртуальных методов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2012, 00:19:49 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
riskСтранно, почему никто не упомянул о том, что интерфейс с абстрактный класс наверняка имеют разную структуру, хотя бы из-за той же таблицы виртуальных методов. это опупительно важно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2012, 13:41:53 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
riskСтранно, почему никто не упомянул о том, что интерфейс с абстрактный класс наверняка имеют разную структуру, хотя бы из-за той же таблицы виртуальных методов.далеко не факт. Если обследовать класс через рефлекшен API, то все его интерфейсы представлены в виде объектов класса java.lang.Classjavadocpublic Class<?>[] getInterfaces() Determines the interfaces implemented by the class or interface represented by this object. также в некоторых случаях декомпилятор реверсил интерфейсы в виде абстрактных классов. потому ИМХО на уровне вируальной машины абстрактные классы без реализации методов тождественны интерфейсам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2012, 14:20:21 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
VoDAriskСтранно, почему никто не упомянул о том, что интерфейс с абстрактный класс наверняка имеют разную структуру, хотя бы из-за той же таблицы виртуальных методов.далеко не факт. Если обследовать класс через рефлекшен API, то все его интерфейсы представлены в виде объектов класса java.lang.Classjavadocpublic Class<?>[] getInterfaces() Determines the interfaces implemented by the class or interface represented by this object. также в некоторых случаях декомпилятор реверсил интерфейсы в виде абстрактных классов. потому ИМХО на уровне вируальной машины абстрактные классы без реализации методов тождественны интерфейсам. Декомпилятор какой ? От Oracle|Sun или сторонний? скорее всего сторонний, потому он явно не может знать всех деталей реализации JVM и компилятора По поводу интерфейсов через рефлексию - а что там собственно говоря могли вернуть? В яве есть только два варианта массив value типов или инстансы классов... По поводу абстрактных классов без реализации - согласен с вашим мнением. Скорее всего там идет подстановка - даже если вы объявили асбтрактный класс без реализаций - то внутри JVM он будет представлен интерфейсом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2012, 22:00:43 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
chpashariskСтранно, почему никто не упомянул о том, что интерфейс с абстрактный класс наверняка имеют разную структуру, хотя бы из-за той же таблицы виртуальных методов. это опупительно важно Ну тогда надо было посылать сразу в гугл и не рассусоливать то что можно нагуглить за 2 минуты.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2012, 22:01:48 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
riskНу тогда надо было посылать сразу в гугл и не рассусоливать то что можно нагуглить за 2 минуты.... это всегда по настроению ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2012, 23:42:51 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Прально тут писали, что интерфейс это по сути контракт. Вообще интерфейс это более чистая реалзация абстракции. В нем могут быть только описания методов, но никогда не будет их реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 16:35:16 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
jabПрально тут писали, что интерфейс это по сути контракт. Вообще интерфейс это более чистая реалзация абстракции. В нем могут быть только описания методов, но никогда не будет их реализации. ну, в Java ещё впихнули туда набор констант. Т.е. это уже вроде как реализация-поведение. Хотя спорно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 17:11:08 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Petro123jabПрально тут писали, что интерфейс это по сути контракт. Вообще интерфейс это более чистая реалзация абстракции. В нем могут быть только описания методов, но никогда не будет их реализации. ну, в Java ещё впихнули туда набор констант. Т.е. это уже вроде как реализация-поведение. Хотя спорно.константы в интерфейсе всегда final. By design. Так что это не поведение - это чистые константы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 23:54:53 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
VoDA, понятно, что это спорно - считать ли поведением, наделение объекта набором констант. Для меня любые "величины" - поведение :) afaik я только в Java это встретил. Могу ошибаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 09:44:51 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Petro123VoDA, понятно, что это спорно - считать ли поведением, наделение объекта набором констант. Для меня любые "величины" - поведение :) afaik я только в Java это встретил. Могу ошибаться.В Scala вроде сохранено подобное поведение. Kotlin и Ceylon совместимы с java, значит и константы в интерфейсах должны поддерживать. А вот в C# запрещено помещать константы в интерфейсы. ИМХО это дело вкуса. Интерфейс это описание способа взаимодействия с подсистемой или либой. Код: java 1. 2. 3. Как можно узнать какие константы нужно подставить в side и measure чтобы система выполнила поворот налево в 5 градусов? Код: java 1. 2. 3. 4. 5. 6. И вот уже внешняя система может определиться и выполнить: Код: java 1. Потому использовать интерфейсы как хранилище для констант взаимодействия с подсистемой вполне логично. В примере можно объединить Robot и RobotConstraints - возможно это также упростит использование такого кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 11:19:18 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
VoDA, у меня посыл другой.... Как у ФП. Т.е. интерфейс это проводник-труба, процесс-меняющий данные. В ФП - нет состояния. У интерфейса тоже нет. Следовательно, повернуть на 5 град. неважно от чего. Вот такие мысли 6-м чувством :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 11:31:21 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Petro123VoDA, у меня посыл другой.... Как у ФП. Т.е. интерфейс это проводник-труба, процесс-меняющий данные. В ФП - нет состояния. У интерфейса тоже нет. Следовательно, повернуть на 5 град. неважно от чего. Вот такие мысли 6-м чувством :)Состояние - это то, что может измениться. Интерфейс не меняется, потому он как и функция в ФП не обладает состоянием ;) Интерфейс как и функция может вызывать изменения где то еще - интерфейс в объекте, к которому этот "проводник-труба" подключен, а функция - выдает изменения в виде возвращаемого объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 11:49:58 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
Добрый день, Petro123! > Т.е. интерфейс это проводник-труба, процесс-меняющий данные. > В ФП - нет состояния. У интерфейса тоже нет. Ну будет нужно писать getRight() вместо RIGHT - что поменяется? Кроме того, что контрактом константы является её значение, а функции- обещание в комментарии? -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 11:59:17 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
1) абстрактный класс может содеражать реализацию методов, интерфейс - нет. 2) можно наледовать множество интерфейсов но только 1-н класс 3) как и говорили интерфейсы работают медленнее вобщем мораль сей басни такова: если у тебя есть класс который не является самодостаточной единицей, и каждый объект требует своей собственной реализации\ дополнения, но между ними есть какой-то общий функционал тогда это абстрактный класс. есть нужно обеспечить просто единый интерфейс работы всех классов (у всех одинаковые имена но разная реализация, "полиморфизм интерфейса") но каждый имеет собственную реализацию - это интерфейс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 12:06:40 |
|
||
|
В чем разница между абстрактным классом и интерфейсом?
|
|||
|---|---|---|---|
|
#18+
jabПрально тут писали, что интерфейс это по сути контракт. Вообще интерфейс это более чистая реалзация абстракции. В нем могут быть только описания методов, но никогда не будет их реализации. Ответ спорный - можно протроллить тем, что в теле интерфейса возможно поместить реализацию объявленного абстрактного метода через вложенный класс собственно реализующий этот интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 19:06:58 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2132271]: |
0ms |
get settings: |
15ms |
get forum list: |
20ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
47ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
105ms |
get tp. blocked users: |
2ms |
| others: | 550ms |
| total: | 770ms |

| 0 / 0 |
