Sobes.tech
Junior — Middle

Aké sú rozdiely medzi abstraktnou triedou a rozhraním v objektovo orientovanom programovaní?

sobes.tech AI

Odpoveď od AI

Abstraktna razred in vmesnik sta dva načina za opisovanje pogodb in vedenj v objektno usmerjenem programiranju, vendar z različnimi lastnostmi:

  • Abstraktni razred lahko vsebuje abstraktne metode (brez implementacije), pa tudi metode z implementacijo in polja (stanje). Služi kot osnovni razred, od katerega je mogoče podedovati.
  • Vmesnik opisuje le podpise metod (pogodbo), ne vsebuje stanja in običajno ne vsebuje implementacije (čeprav so v nekaterih jezikih možne privzete metode).

Razlike:

  • Razred lahko podeduje le od enega abstraktnega razreda, vendar lahko implementira več vmesnikov.
  • Abstraktni razred lahko ima konstruktorje, vmesnik ne.
  • Abstraktni razred se uporablja, ko je potrebno delno implementirati funkcionalnost, vmesnik, ko je potrebno le določiti pogodbo.

Primer v Dart (Flutter):

abstract class Animal {
  void eat(); // abstraktna metoda
  void sleep() {
    print('Spi'); // metoda z implementacijo
  }
}

// Vmesnik v Dart — to je razred z le abstraktnimi metodami
abstract class Flyable {
  void fly();
}

class Bird extends Animal implements Flyable {
  @override
  void eat() {
    print('Ptica jeje');
  }

  @override
  void fly() {
    print('Ptica leti');
  }
}