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