Sobes.tech
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.