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');
}
}