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