Sobes.tech
Junior — Middle

Qual é a diferença entre uma interface e uma classe abstrata no contexto da programação orientada a objetos?

sobes.tech IA

Resposta da IA

A interface e a classe abstrata são duas formas de definir abstrações na programação orientada a objetos, mas têm diferenças-chave:

  • Interface descreve um conjunto de métodos que a classe deve implementar, mas não contém implementação (embora em algumas linguagens seja possível ter métodos com implementação padrão). A interface não pode conter estado (variáveis de instância).
  • Classe abstrata pode conter tanto métodos abstratos (sem implementação) quanto métodos com implementação. Também pode conter campos (estado).

Exemplo em Swift:

protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("Motor ligado")
    }
}

// A classe abstrata em Swift é implementada através de uma classe com métodos que precisam ser sobrescritos
class Animal {
    func makeSound() {
        fatalError("Este método deve ser sobrescrito")
    }
}

class Dog: Animal {
    override func makeSound() {
        print("Au au")
    }
}

Assim, a interface define um contrato, e a classe abstrata pode fornecer uma implementação parcial e manter estado.