Sobes.tech
Junior — Middle

Millised on erinevused abstraktse klassi ja liidese vahel objektorienteeritud programmeerimises?

sobes.tech AI

Vastus AI-lt

Käskkiri ja liides on kaks viisi, kuidas kirjeldada lepinguid ja käitumist objektorienteeritud programmeerimises, kuid erinevate omadustega:

  • Käskkiri võib sisaldada abstraktseid meetodeid (ilma rakenduseta), samuti meetodeid rakendusega ja välju (olek). See toimib alusklassina, millest saab pärida.
  • Liides kirjeldab ainult meetodite allkirju (leping), ei sisalda olekut ja tavaliselt ei sisalda rakendust (kuigi mõnedes keeltes on võimalikud vaikimisi meetodid).

Erinevused:

  • Klass võib pärida ainult ühest abstraktsest klassist, kuid rakendada mitmeid liideseid.
  • Abstraktne klass võib omada konstruktorid, liides mitte.
  • Abstraktset klassi kasutatakse, kui on vaja osaliselt funktsionaalsust rakendada, liidest, kui on vaja ainult lepingut määratleda.

Näide Dart (Flutter):

abstract class Animal {
  void eat(); // abstraktne meetod
  void sleep() {
    print('Magab'); // rakendusega meetod
  }
}

// Liides Dartis — see on klass ainult abstraktsete meetoditega
abstract class Flyable {
  void fly();
}

class Bird extends Animal implements Flyable {
  @override
  void eat() {
    print('Lind sööb');
  }

  @override
  void fly() {
    print('Lind lendab');
  }
}