Чем абстрактный класс отличается от интерфейса?
По ходу ничем, разве что абстрактный класс можно наследовать только один, а интерфейсов кучу. Экземпляр интерфейса, как и абстрактного класса создать нельзя.
Странно это всё и непонятно. Зачем это всё наворотили?
затем и создали интерфейс, чтобы проблем с наследованием не было: отказались от полей и прочих частей, под которые нужно выделять память, в пользу множественного наследования
Пока абстрактный класс и интерфейс никак не используются, разница не видна. Но на практике их использование различно.
Абстрактный класс подразумевает, что в программе будут существовать объекты-наследники. То есть это некое обобщение реально существующих объектов, оформляется как общий предок. Важно, что всю иерархию абстрактного класса нужно писать с нуля.
Интерфейсы - это общий функционал, который можно добавлять к уже существующим классам. Делается наследник с таким-то интерфейсом, сам класс уже описан, он может даже быть в сторонней библиотеке. Так интерфейсы расширяют функционал, но это именно функционал, то есть набор действий над реальными объектами разных сортов.
нифига себе "ничем"....
"абстрактный класс можно наследовать только один, а интерфейсов кучу." -- этого мало?...
может вы не за тем в джаве копаетесь?
Interface - заставляет тебя давать отдельные инструкции для каждого метода.
Abstract - не заставляет тебя давать отдельные функций для каждого метода.
---
Пример:
У тебя есть интерфейс fighter и он имеет метод attack.
Ты хочешь что бы все твой герои умели атаковать но логику того как они атакуют должна быть разная. И нельзя что бы они не умели атаковать.
Пример:
Маг implements fighter заставит тебя создать метод attack() и дать инструкции того как метод должен работать.
Если ты не напишешь инструкции для метода интерфейса компилятор обидеться и выдаст ошибку.
Такого не случилось бы с абстрактными классом.
Интерфейсы хороши тогда когда тебе нужны похожие методы но с разным поведением.
Другой пример:
Анимация смерти, звук и приз. Для каждого существа он должен быть разный а не одинаковый. И это должно быть в каждом существе.
Абстрактный класс может содержать реализованные методы.