Зачем нам абстрактные классы в Java?
Зачем нам нужны абстрактные классы в Java? Если вы никогда не собираетесь превращать его в объект, зачем его вообще? Как вы используете его? Почему это там? Мне интересно то же самое с абстрактными методами. Я нахожу, что это похоже на концепцию суперкласса без подклассов, которые когда-либо имели бы значение.
3 ответа
Абстрактный класс может использоваться как тип шаблона для других классов. Абстрактный класс будет содержать общие функциональные возможности для всех классов, которые его расширяют.
Например:
Abstract Class Animal
Все животные двигаются, дышат и размножаются, чтобы их можно было поместить в класс животных.
Сейчас
Concrete Class Dog, Cat etc.
Эти базовые функции уже предусмотрены.
Абстрактные классы позволяют предоставлять частичный набор реализаций методов по умолчанию в классе. Поскольку они неполные, их нельзя создавать и использовать в том виде, в каком они есть, но их можно разделить на подклассы, чтобы добавить недостающие детали способом, характерным для конкретных реализаций, и эти подклассы могут быть созданы.
Без абстрактных классов вы должны были бы предоставить фиктивные реализации методов, которые вы намерены переопределить... что можно было бы сделать, но тогда был бы риск забыть реализовать один из них. Тот факт, что некоторые методы остаются полностью абстрактными, гарантирует, что реальные реализации должны заполнить пробелы или продолжать абстрагировать себя и заставлять своих потомков делать это.
Это не то, без чего язык не может жить. Но это очень полезно. Вы узнаете, насколько это полезно, когда вы станете более опытным в Java и ОО-дизайне.
(Обратите внимание, что мы сказали то же самое, в основном, в прошлый раз, когда вы подняли этот вопрос. Поэтому, если вы все еще в замешательстве, вы можете быть более точным в том, что именно вас смущает.)
Существует множество вариантов использования абстрактных выражений. Основная цель абстрактных классов - функционировать как базовые классы, которые могут быть расширены подклассами для создания полной реализации.
Например,
У вас может быть три шага, которые будут реализованы в вашей программе,
- Несколько шагов до действия
- Некоторое действие, которое нужно выполнить
- Несколько шагов после действия
Таким образом, в этом случае вы можете определить абстрактный класс тремя методами:
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 также является очень хорошим примером.