Junior — Middle
Mi a különbség a felület és az absztrakt osztály között az objektumorientált programozás kontextusában?
sobes.tech MI
Válasz az MI-től
Az interfész és az absztrakt osztály két módja az absztrakciók meghatározásának az objektumorientált programozásban, de kulcsfontosságú különbségeik vannak:
- Interfész leírja az osztálynak kötelezően megvalósítandó metódusokat, de nem tartalmaz megvalósítást (bár néhány nyelvben lehetnek alapértelmezett megvalósítású metódusok). Az interfész nem tartalmazhat állapotot (példányváltozókat).
- Absztrakt osztály tartalmazhat mind absztrakt (megvalósítás nélküli), mind megvalósított metódusokat. Emellett tartalmazhat mezőket (állapotot).
Swift példával:
protocol Vehicle {
func startEngine()
}
class Car: Vehicle {
func startEngine() {
print("Motor elindult")
}
}
// Az absztrakt osztály Swiftben egy olyan osztály, amelyben felülírni való metódusokat definiálunk
class Animal {
func makeSound() {
fatalError("Ezt a metódust felül kell írni")
}
}
class Dog: Animal {
override func makeSound() {
print("Vau")
}
}
Így az interfész szerződést határoz meg, az absztrakt osztály pedig részleges megvalósítást nyújthat és állapotot tárolhat.