Java
Подскажите зачем в Яве интерфейсы и абстрактные классы
Добрый день. Подскажите зачем в Яве интерфейсы и абстрактные классы. Я то вроде бы понимаю слегка, но мне нужны два чётких примера, что бы оно усвоилось в моей памяти и я видел их различие на примерах.
Не обязательно это понимать. Главное знать, как это работает. Зачем нужно - увидишь на практике или когда будешь изучать классы стандартной библиотеки Java, там используются интерфейсы и абстрактные классы.
Например, есть класс "Геометрическая фигура". У него есть метод "Нарисовать" (без реализации) и больше ничего нет. Потому что абстрактной геометрической фигуры не существует, есть только конкретные: круг, квадрат, треугольник и другие. Это классы-наследники. Базовый класс "Геометрическая фигура" можно сделать абстрактным классом. Но лучше сделать интерфейсом. Каждый класс-наследник реализует метод "Нарисовать" по-своему. Иерархия классов позволяет вызывать метод "Нарисовать" не зная реальный класс объекта. Разные геометрические фигуры можно сложить в один массив, где тип элемента "Геометрическая фигура".
Это относится не только к Java. Почти во всех ООП-языках то же самое.
Например, есть класс "Геометрическая фигура". У него есть метод "Нарисовать" (без реализации) и больше ничего нет. Потому что абстрактной геометрической фигуры не существует, есть только конкретные: круг, квадрат, треугольник и другие. Это классы-наследники. Базовый класс "Геометрическая фигура" можно сделать абстрактным классом. Но лучше сделать интерфейсом. Каждый класс-наследник реализует метод "Нарисовать" по-своему. Иерархия классов позволяет вызывать метод "Нарисовать" не зная реальный класс объекта. Разные геометрические фигуры можно сложить в один массив, где тип элемента "Геометрическая фигура".
Это относится не только к Java. Почти во всех ООП-языках то же самое.
Интерфейс - это некоторая договоренность о способе обмена данными. Класс может реализовывать интерфейс как ему вздумается. Разные классы могут реализовывать один и тот же интерфейс и всеми такими классами можно пользоваться одинаково, используя, ЧСХ, этот инерфейс.
Пример - ты и я реализуем интерфейс "ПозвонитьВасе". Я буду звонить из Америки, ты - из России (?), но в конце концов мы Васе все же дозвонимся.
Абстрактный класс - это некий общий предок семейства классов. Например, у абстрактного класса "Мужик" есть метод "ПочесатьЯйца". Ты переопределяешь этот метод по-своему и чешешь яйца правой рукой, а я - левой. Но при этом мы оба мужики и наши яйца все равно будут почесаны.
В этом, собссно, главная разница между интерфейсами и классами: Васе позвонить может кто угодно, а вот яйца почесать - только мужики. Смекаешь?
Пример - ты и я реализуем интерфейс "ПозвонитьВасе". Я буду звонить из Америки, ты - из России (?), но в конце концов мы Васе все же дозвонимся.
Абстрактный класс - это некий общий предок семейства классов. Например, у абстрактного класса "Мужик" есть метод "ПочесатьЯйца". Ты переопределяешь этот метод по-своему и чешешь яйца правой рукой, а я - левой. Но при этом мы оба мужики и наши яйца все равно будут почесаны.
В этом, собссно, главная разница между интерфейсами и классами: Васе позвонить может кто угодно, а вот яйца почесать - только мужики. Смекаешь?
Evgeniy Xxx
Хех, интересные примеры, спасибо. Вроде бы разобрался
Сергей Каракаций
но ведь и нтерфейсы теперь могут содержать реализацию каких-то своих методов...
разница...
твой класс может реализовывать несколько интерфейсов, но расширять может только один класс -- абстрактный или обычный -- не имеет значения.
разница...
ты можешь создать экземпляр абстрактного класса (потому что это "класс"), но ты не можешь создать экземпляр интерфейса...
твой класс может реализовывать несколько интерфейсов, но расширять может только один класс -- абстрактный или обычный -- не имеет значения.
разница...
ты можешь создать экземпляр абстрактного класса (потому что это "класс"), но ты не можешь создать экземпляр интерфейса...
Максим Грей
Нельзя создать экземпляр абстрактного класса.
Не обязательно это понимать. Главное знать, как это работает. Зачем нужно - увидишь на практике или когда будешь изучать классы стандартной библиотеки Java, там используются интерфейсы и абстрактные классы.
Например, есть класс "Геометрическая фигура". У него есть метод "Нарисовать" (без реализации) и больше ничего нет. Потому что абстр
Например, есть класс "Геометрическая фигура". У него есть метод "Нарисовать" (без реализации) и больше ничего нет. Потому что абстр
Похожие вопросы
- какая разница между интерфейсом и абстрактным классом? И есть она принципиальная ?. Приведите примеры.
- Чем абстрактный класс отличается от интерфейса?
- Абстрактный класс или интерфейс (java)
- как правильней организовывать абстрактный класс JAVA
- Зачем в Java придумали абстрактные классы?
- Как создать программу (Java), чтобы была не консольной, а с интерфейсом GUI
- Можно ли реализовать полиморфизм (Java) с общим конструктором для разных дочерних классов?
- Стоит ли во всех случаях сделать методы класса статичным, если они не используют абсолютно никакое поле класса?
- Как обратиться к объектам другого класса
- Java методы классы