В чем разница между интерфейсом и абстрактным классом?

Абстрактный класс может содержать код в телах методов, что является недопустимым в случае с интерфейсами. Работая с абстрактными классами, необходимо наследоваться от них. Также в java запрещено множественное наследование. Что касается интерфейсов - вы можете реализовывать их в своих классах.
Конец
Материалы, которые могут вас заинтересовать
- Синхронизация потоков. Для чего предназначен метод join()?
- Как происходит взаимодействие между потоками? Как реализовать producer (один поток) и consumer (другой поток) для передачи данных через стек?
- Что такое daemon thread?
- Сихронизация потоков. В чем разница между синхронизацией метода и блока?
- Потоки в Java. Чем отличаются методы yield(), sleep(), wait()?
- Какие существует методы создания потоков (нитей)?
- Почему не рекомендуется отлавливать тип исключения “Exception”?
- Что такое приведение типов? Объясните up casting/down casting. Когда происходит ClassCastException?
- В чем преимущество операторов "&&, ||" над логическими "&, |"?







Я вообще не понимаю разницы между интерфейсами и классами в Java, тем более что различие между классами и интерфейсами посягает на фундаментальную сущность языка Java, которая заключается в том, что "всё есть объект".
Я сперва тоже долго въезжал. Лучше всего говорить, что класс - отвечает на вопрос "кто такой?", а интерфейс "что умеет?".
Вот, например, есть интерфейс Serializable. Он как бы дает дополнительный функционал классу.
То есть, если класс implements Serializable, то про него можно сказать, что он умеет сериализоваться.
Как в ролевой игре. Представьте, что класс - ваш персонаж, а интерфейсы - его скилы, навыки.
Например, класс Hero.
И выдумаем интерфейсы:
Kill
Fight
Love
Fuck
Так вот если Hero implements Kill - он уже научился убивать
implements Fight - научился драться и т.д.
Например, если в интерфейсе Kill есть метод public void KillByLeg();
То если Hero implements Kill, как бы умеет убивать, он должен реализовать (описать), как он будет убивать ногой конкретно (KillByLeg() )
Как-то так...
Реально интересный подход к этому вопросу. Раньше такого не читал еще
+1 за такое изложение вопроса. Очень здорово получилось
Интересное объяснение!
+1
согласен, запоминается хорошо
А вот для меня интерфейсы пока загадка... Буду курить ваше описание, пока не въеду полностью (но что-то подсказывает, что это будет непродолжительно). Спасибо!
Шикарная развязка, браво!
немного развил =)
к стати недостаток расширения функциональности через наследование на лицо!
имеем класс MovieAction нам необходимо сделать его потоковым - наследуем от Thread. и все! больше предков накинуть не сможем. а интерфейсов может быть сколько душе угодно ) да и вообще считается хорошей практикой работать через интерфейсы а не через наследование
упала под стол :D
В субботу экзамен по яве, если я напишу что-нить в таком духе, гарантирвоанно А )))))
Отправить комментарий