Java

Подскажите зачем в Яве интерфейсы и абстрактные классы

Добрый день. Подскажите зачем в Яве интерфейсы и абстрактные классы. Я то вроде бы понимаю слегка, но мне нужны два чётких примера, что бы оно усвоилось в моей памяти и я видел их различие на примерах.
Evgeniy Xxx
Evgeniy Xxx
390
Не обязательно это понимать. Главное знать, как это работает. Зачем нужно - увидишь на практике или когда будешь изучать классы стандартной библиотеки Java, там используются интерфейсы и абстрактные классы.

Например, есть класс "Геометрическая фигура". У него есть метод "Нарисовать" (без реализации) и больше ничего нет. Потому что абстрактной геометрической фигуры не существует, есть только конкретные: круг, квадрат, треугольник и другие. Это классы-наследники. Базовый класс "Геометрическая фигура" можно сделать абстрактным классом. Но лучше сделать интерфейсом. Каждый класс-наследник реализует метод "Нарисовать" по-своему. Иерархия классов позволяет вызывать метод "Нарисовать" не зная реальный класс объекта. Разные геометрические фигуры можно сложить в один массив, где тип элемента "Геометрическая фигура".

Это относится не только к Java. Почти во всех ООП-языках то же самое.
Шынгыс Жадыгеров
Шынгыс Жадыгеров
58 065
Лучший ответ
Интерфейс - это некоторая договоренность о способе обмена данными. Класс может реализовывать интерфейс как ему вздумается. Разные классы могут реализовывать один и тот же интерфейс и всеми такими классами можно пользоваться одинаково, используя, ЧСХ, этот инерфейс.
Пример - ты и я реализуем интерфейс "ПозвонитьВасе". Я буду звонить из Америки, ты - из России (?), но в конце концов мы Васе все же дозвонимся.
Абстрактный класс - это некий общий предок семейства классов. Например, у абстрактного класса "Мужик" есть метод "ПочесатьЯйца". Ты переопределяешь этот метод по-своему и чешешь яйца правой рукой, а я - левой. Но при этом мы оба мужики и наши яйца все равно будут почесаны.
В этом, собссно, главная разница между интерфейсами и классами: Васе позвонить может кто угодно, а вот яйца почесать - только мужики. Смекаешь?
Bekbolat Tolko ****
Bekbolat Tolko ****
55 719
Evgeniy Xxx Хех, интересные примеры, спасибо. Вроде бы разобрался
Сергей Каракаций но ведь и нтерфейсы теперь могут содержать реализацию каких-то своих методов...
разница...
твой класс может реализовывать несколько интерфейсов, но расширять может только один класс -- абстрактный или обычный -- не имеет значения.
разница...
ты можешь создать экземпляр абстрактного класса (потому что это "класс"), но ты не можешь создать экземпляр интерфейса...
Максим Грей Нельзя создать экземпляр абстрактного класса.
Не обязательно это понимать. Главное знать, как это работает. Зачем нужно - увидишь на практике или когда будешь изучать классы стандартной библиотеки Java, там используются интерфейсы и абстрактные классы.

Например, есть класс "Геометрическая фигура". У него есть метод "Нарисовать" (без реализации) и больше ничего нет. Потому что абстр
De
Denis
379