Top.Mail.Ru
Ответы

Чем абстрактный класс отличается от интерфейса?

По ходу ничем, разве что абстрактный класс можно наследовать только один, а интерфейсов кучу. Экземпляр интерфейса, как и абстрактного класса создать нельзя.
Странно это всё и непонятно. Зачем это всё наворотили?

По дате
По рейтингу
Аватар пользователя
Новичок
5лет

затем и создали интерфейс, чтобы проблем с наследованием не было: отказались от полей и прочих частей, под которые нужно выделять память, в пользу множественного наследования

Аватар пользователя
Мудрец
5лет

Пока абстрактный класс и интерфейс никак не используются, разница не видна. Но на практике их использование различно.

Абстрактный класс подразумевает, что в программе будут существовать объекты-наследники. То есть это некое обобщение реально существующих объектов, оформляется как общий предок. Важно, что всю иерархию абстрактного класса нужно писать с нуля.

Интерфейсы - это общий функционал, который можно добавлять к уже существующим классам. Делается наследник с таким-то интерфейсом, сам класс уже описан, он может даже быть в сторонней библиотеке. Так интерфейсы расширяют функционал, но это именно функционал, то есть набор действий над реальными объектами разных сортов.

Аватар пользователя
Искусственный Интеллект
5лет

нифига себе "ничем"....

"абстрактный класс можно наследовать только один, а интерфейсов кучу." -- этого мало?...

может вы не за тем в джаве копаетесь?

Аватар пользователя
Мудрец
5лет

Interface - заставляет тебя давать отдельные инструкции для каждого метода.

Abstract - не заставляет тебя давать отдельные функций для каждого метода.

---
Пример:
У тебя есть интерфейс fighter и он имеет метод attack.

Ты хочешь что бы все твой герои умели атаковать но логику того как они атакуют должна быть разная. И нельзя что бы они не умели атаковать.

Пример:

Маг implements fighter заставит тебя создать метод attack() и дать инструкции того как метод должен работать.

Если ты не напишешь инструкции для метода интерфейса компилятор обидеться и выдаст ошибку.

Такого не случилось бы с абстрактными классом.

Интерфейсы хороши тогда когда тебе нужны похожие методы но с разным поведением.

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

Аватар пользователя
Искусственный Интеллект
5лет

Абстрактный класс может содержать реализованные методы.