По ходу ничем, разве что абстрактный класс можно наследовать только один, а интерфейсов кучу. Экземпляр интерфейса, как и абстрактного класса создать нельзя.
Странно это всё и непонятно. Зачем это всё наворотили?
Java
Чем абстрактный класс отличается от интерфейса?
затем и создали интерфейс, чтобы проблем с наследованием не было: отказались от полей и прочих частей, под которые нужно выделять память, в пользу множественного наследования
Николай Иванов
И всё?
нифига себе "ничем"....
"абстрактный класс можно наследовать только один, а интерфейсов кучу." -- этого мало?...
может вы не за тем в джаве копаетесь?
"абстрактный класс можно наследовать только один, а интерфейсов кучу." -- этого мало?...
может вы не за тем в джаве копаетесь?
Николай Иванов
Мало.
Абстрактный класс может содержать реализованные методы.
Арал Спорт Бөлімі
Интерфейс тоже может содержать реализацию методов (если идёт речь о Java)
Если базовый класс содержит всю нужную логику, за исключением пары методов, реализация которых может быть разной, то логичнее его сделать абстрактным, а в наследниках дополнить логикой. Если логика всех методов отлична, то логичнее юзать интерфейс, и переопределять все эти методы у всех классов, реализующих интерфейс.
Николай Иванов
Чисто для удобства?
Interface - заставляет тебя давать отдельные инструкции для каждого метода.
Abstract - не заставляет тебя давать отдельные функций для каждого метода.
---
Пример:
У тебя есть интерфейс fighter и он имеет метод attack.
Ты хочешь что бы все твой герои умели атаковать но логику того как они атакуют должна быть разная. И нельзя что бы они не умели атаковать.
Пример:
Маг implements fighter заставит тебя создать метод attack() и дать инструкции того как метод должен работать.
Если ты не напишешь инструкции для метода интерфейса компилятор обидеться и выдаст ошибку.
Такого не случилось бы с абстрактными классом.
Интерфейсы хороши тогда когда тебе нужны похожие методы но с разным поведением.
Другой пример:
Анимация смерти, звук и приз. Для каждого существа он должен быть разный а не одинаковый. И это должно быть в каждом существе.
Abstract - не заставляет тебя давать отдельные функций для каждого метода.
---
Пример:
У тебя есть интерфейс fighter и он имеет метод attack.
Ты хочешь что бы все твой герои умели атаковать но логику того как они атакуют должна быть разная. И нельзя что бы они не умели атаковать.
Пример:
Маг implements fighter заставит тебя создать метод attack() и дать инструкции того как метод должен работать.
Если ты не напишешь инструкции для метода интерфейса компилятор обидеться и выдаст ошибку.
Такого не случилось бы с абстрактными классом.
Интерфейсы хороши тогда когда тебе нужны похожие методы но с разным поведением.
Другой пример:
Анимация смерти, звук и приз. Для каждого существа он должен быть разный а не одинаковый. И это должно быть в каждом существе.
Константин Иванович
наследование абстрактного класса тоже обязывает...
если не реализуешь абстрактные методы, то не бывать твоем у классу "полноценным"...
если не реализуешь абстрактные методы, то не бывать твоем у классу "полноценным"...
Пока абстрактный класс и интерфейс никак не используются, разница не видна. Но на практике их использование различно.
Абстрактный класс подразумевает, что в программе будут существовать объекты-наследники. То есть это некое обобщение реально существующих объектов, оформляется как общий предок. Важно, что всю иерархию абстрактного класса нужно писать с нуля.
Интерфейсы - это общий функционал, который можно добавлять к уже существующим классам. Делается наследник с таким-то интерфейсом, сам класс уже описан, он может даже быть в сторонней библиотеке. Так интерфейсы расширяют функционал, но это именно функционал, то есть набор действий над реальными объектами разных сортов.
Абстрактный класс подразумевает, что в программе будут существовать объекты-наследники. То есть это некое обобщение реально существующих объектов, оформляется как общий предок. Важно, что всю иерархию абстрактного класса нужно писать с нуля.
Интерфейсы - это общий функционал, который можно добавлять к уже существующим классам. Делается наследник с таким-то интерфейсом, сам класс уже описан, он может даже быть в сторонней библиотеке. Так интерфейсы расширяют функционал, но это именно функционал, то есть набор действий над реальными объектами разных сортов.
Похожие вопросы
- Абстрактный класс или интерфейс (java)
- Подскажите зачем в Яве интерфейсы и абстрактные классы
- какая разница между интерфейсом и абстрактным классом? И есть она принципиальная ?. Приведите примеры.
- как правильней организовывать абстрактный класс JAVA
- Зачем в Java придумали абстрактные классы?
- Как создать программу (Java), чтобы была не консольной, а с интерфейсом GUI
- Можно ли реализовать полиморфизм (Java) с общим конструктором для разных дочерних классов?
- Стоит ли во всех случаях сделать методы класса статичным, если они не используют абсолютно никакое поле класса?
- Отличается сумма Почему отличается сумма ряда 1/n^2 при n от 1 до 1000000 и от 1000000 до 1?
- Как обратиться к объектам другого класса