Зачем нужны абстрактные классы в Java?
Зачем нужны абстрактные классы в Java? Если вы никогда не собираетесь превращать его в объект, то зачем ему это делать? Как ты это используешь? Почему он там? Мне интересно то же самое с абстрактными методами. Я считаю, что похоже на аналогичную концепцию наличия суперкласса с подклассами NO, которые могут когда-либо быть полезными.
Ответы
Ответ 1
Абстрактный класс может использоваться как тип шаблона для других классов. Абстрактный класс будет обладать общей функциональностью для всех классов, которые его расширяют.
Например:
Abstract Class Animal
Все животные движутся, дышат и размножаются, чтобы их можно было поместить в класс животных.
Теперь
Concrete Class Dog, Cat etc.
У вас уже есть эти базовые функции.
Ответ 2
Абстрактные классы допускают предоставление частичного набора реализаций по умолчанию методов в классе. Поскольку они неполны, они не могут быть созданы и использованы в том виде, в каком они стоят, но они могут быть подклассифицированы, чтобы добавить недостающие данные таким образом, который специфичен для этих конкретных реализаций, и эти подклассы могут быть созданы.
Без абстрактных классов вам придется предоставить фиктивные реализации методов, которые вы намереваетесь переопределить... что можно сделать, но тогда возникнет риск забыть реализовать один из них. Наличие некоторых методов полностью абстрактно гарантирует, что реальные реализации должны заполнить пробелы или продолжать абстрагироваться и заставить своих потомков сделать это.
Это не то, с чем язык не мог жить без. Но это очень полезно. Вы узнаете, насколько полезно, когда вы становитесь более опытными в разработке Java и OO.
(Обратите внимание, что мы говорили то же самое, в основном, в последний раз, когда вы поднимали этот вопрос. Поэтому, если вы все еще смущены, вам может потребоваться более конкретное то, что вас сбивает с толку.)
Ответ 3
Множество применений абстрактных класов, основная цель абстрактных классов - функционировать в качестве базовых классов, которые могут быть расширены подклассами для создания полной реализации.
Например,
В вашей программе может быть три шага,
- Несколько шагов перед действием
- Некоторые действия, которые необходимо выполнить
- Несколько шагов после действия
Итак, в этом случае вы можете определить абстрактный класс тремя способами:
public abstract MyAbstractProcess {
public void stepBefore() {
//implementation directly in abstract superclass
}
public abstract void action(); // implemented by subclasses
public void stepAfter() {
//implementation directly in abstract superclass
}
}
Кроме того, приведенный выше пример абстрактного класса Animal также является очень хорошим примером.