Sobes.tech
Junior — Middle

Milyen különbségek vannak az absztrakt osztály és az interfész között az objektumorientált programozásban?

sobes.tech MI

Válasz az MI-től

Absztrakt osztály és interfész két módja annak, hogy szerződéseket és viselkedéseket írjunk le az objektumorientált programozásban, de különböző jellemzőkkel:

  • Absztrakt osztály tartalmazhat absztrakt módszereket (implementáció nélkül), valamint implementált módszereket és mezőket (állapot). Alap osztályként szolgál, amelyből öröklődhet.
  • Interfész csak a módszerek aláírásait írja le (szerződés), nem tartalmaz állapotot, és általában nem tartalmaz implementációt (bár néhány nyelvben lehetnek alapértelmezett módszerek).

Különbségek:

  • Egy osztály csak egy absztrakt osztályból örökölhet, de több interfészt is megvalósíthat.
  • Az absztrakt osztálynak lehetnek konstruktorai, az interfésznek nem.
  • Az absztrakt osztályt akkor használjuk, amikor részben szeretnénk implementálni a funkcionalitást, az interfészt pedig, amikor csak szerződést akarunk definiálni.

Példa Dart (Flutter):

abstract class Animal {
  void eat(); // absztrakt módszer
  void sleep() {
    print('Alvás'); // implementált módszer
  }
}

// Interfész Dartben — ez egy osztály csak absztrakt módszerekkel
abstract class Flyable {
  void fly();
}

class Bird extends Animal implements Flyable {
  @override
  void eat() {
    print('A madár eszik');
  }

  @override
  void fly() {
    print('A madár repül');
  }
}