Skip to main content

Полиморфизъм - ООП Магия

Абстрактни Класове и Интерфейси, Полиморфизъм в Java 🔮

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

Абстрактни Класове

Абстрактният клас в Java е клас, който не може да се инстанцира и често съдържа абстрактни методи - методи без имплементация, които трябва да бъдат дефинирани в наследниците на класа.

Особености на Абстрактните Класове:

  • Съдържат един или повече абстрактни методи.
  • Могат да съдържат и конкретни методи с имплементация.
  • Не могат да бъдат инстанцирани директно.
  • Подкласовете трябва да предоставят имплементация на абстрактните методи, освен ако не са също абстрактни.

Пример:

public abstract class Animal {
public abstract void makeSound();

public void breathe() {
System.out.println("I'm breathing.");
}
}

Интерфейси

Интерфейсите дефинират контракт, който класовете могат да имплементират. В Java, интерфейсите са напълно абстрактни и могат да съдържат само абстрактни методи до Java 7, след което в Java 8 се добавят и default методи с имплементация.

Основи на Интерфейсите:

  • Всеки метод в интерфейс е public и abstract по подразбиране.
  • С Java 8, интерфейсите могат да имат и default методи с имплементация.
  • Интерфейсите не могат да имат инстанционни променливи.

Пример:

public interface Flyable {
void fly();

default void glide() {
System.out.println("Gliding in the air.");
}
}

Полиморфизъм

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

Основи на Полиморфизма:

  • Един интерфейс, множество имплементации.
  • Обектите могат да бъдат реферирани чрез референция на суперклас или интерфейс.
  • Позволява на кода да бъде гъвкав и повторно използваем.

Пример:

public class Bird implements Flyable {
@Override
public void fly() {
System.out.println("Bird is flying.");
}
}

Flyable myBird = new Bird();
myBird.fly(); // Изпълнява метода fly() на Bird, въпреки че референцията е от тип Flyable.

Интересни Факти и Съвети

  • Абстрактните класове и интерфейсите не могат да бъдат инстанцирани, но т

е предоставят основа, върху която да се построят конкретни класове.

  • Интерфейсите поддържат множествено наследяване, докато класовете в Java - само единично.
  • Полиморфизмът улеснява добавянето на нови функционалности, като същевременно се запазва съществуващата функционалност.