Sobes.tech
Middle

Czym różni się klasa abstrakcyjna od interfejsu?

sobes.tech AI

Odpowiedź od AI

Klasa abstrakcyjna — to klasa, która może zawierać zarówno zaimplementowane metody, jak i metody abstrakcyjne (bez implementacji). Służy jako podstawa do dziedziczenia i może zawierać stan (pola).

Interfejs — to kontrakt, który definiuje zestaw metod bez implementacji (w klasycznym rozumieniu). Klasa implementująca interfejs musi zaimplementować wszystkie jego metody.

Główne różnice:

  • Klasa abstrakcyjna może zawierać implementację i stan, interfejs — tylko sygnatury metod (w niektórych językach interfejsy mogą zawierać metody domyślne).
  • Klasa może dziedziczyć tylko po jednej klasie abstrakcyjnej, ale może implementować wiele interfejsów.
  • Klasa abstrakcyjna zapewnia częściową implementację, interfejs — tylko kontrakt.

Przykład w Java:

abstract class Animal {
    void eat() { System.out.println("Jedzenie"); }
    abstract void sound();
}

interface Flyable {
    void fly();
}

class Bird extends Animal implements Flyable {
    void sound() { System.out.println("Ćwir ćwir"); }
    public void fly() { System.out.println("Latanie"); }
}