> For the complete documentation index, see [llms.txt](https://comaqa.gitbook.io/java-automation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://comaqa.gitbook.io/java-automation/oop-v-java/abstraktnye-klassy.md).

# Абстрактные классы

Идея абстрактного класса заключается в следующем предположении – для работы иногда вам требуются не полностью готовые классы, а “заготовки” (полуфабрикаты, если хотите). Они уже кое-что умеют, но в “сыром виде” их использовать нельзя. Причем здесь стоит выделить два момента:

1. Создать экземпляр такого класса нельзя
2. Такой класс требует доработки под какие-либо конкретные условия.

Техническая сторона достаточно простая – для объявления абстрактного класса достаточно добавить ключевое слово abstract в описании класса.

```
abstract public class AbstractModel {
    ...
}
```

Мы можем заставить разработчика НЕ пользоваться нашим классом впрямую, мы можем еще более жестко подойти к наследованию – установить правила, которые заставят класс-наследник реализовать определенные методы.

Для этого необходимо не только класс описать как абстрактный, но и метод, который должен обязательно реализовать наследник. Форма записи достаточно несложная. Здесь только надо отметить, что тело метода отсутствует совсем – сразу за описанием метода ставится точка с запятой.

Например:

```
public abstract class AbstractModel
{
   public abstract void processModel();
}
```

Вопрос 1

```
В чём заключается разница между абстрактным классом и интерфейсом?
```
