> For the complete documentation index, see [llms.txt](https://programmingfundamental.gitbook.io/programmingwithjava/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://programmingfundamental.gitbook.io/programmingwithjava/obektno-orientirano-programirane-1-chast/laboratorno-uprazhnenie-6.md).

# Лабораторно упражнение 6

### Абстрактни класове и интерфейси

Абстракцията е процес, при който се показва само „подходящи“ данни и се „скриват“ ненужни детайли за обекта от потребителя (програмиста който ползва абстракцията).

Тъй като абстрактният клас позволява конкретна имплементация на методи, той не осигурява 100% абстракция. Той осигурява частична абстракция.

Интерфейсите от друга страна се използват за 100% абстракция.

| Абстрактен клас                                                                                           | Интерфейс                                                                               |
| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| Един абстрактен клас може да разшири само един клас или един абстрактен клас в даден момент               | Един интерфейс може да разшири произволен брой интерфейси наведнъж                      |
| Един абстрактен клас може да разшири друг конкретен (редовен) клас или абстрактен клас                    | Един интерфейс може само да разшири друг интерфейс                                      |
| Абстрактният клас може да има както абстрактни, така и конкретни методи                                   | Интерфейсът може да има само абстрактни методи                                          |
| В абстрактния клас ключова дума „abstract“ е задължителна за деклариране на метод като абстракт           | В интерфейса ключова дума „абстрактно“ е по избор за деклариране на метод като абстракт |
| Един абстрактен клас може да има защитени и публични абстрактни методи                                    | Интерфейсът може да има само публични абстрактни методи                                 |
| Един абстрактен клас може да има static, final или static final променлива с всеки спецификатор за достъп | интерфейсът може да има само public static final (константна) променлива                |
