abstract class

Une classe de base que vous ne pouvez pas créer directement, avec des méthodes à compléter par ses descendants.

Sur cette page

Exemple

#
TypeScript
abstract class Exercise {
  constructor(public title: string) {}

  abstract check(answer: string): boolean

  run(answer: string): string {
    return `${this.title}: ${this.check(answer) ? 'correct' : 'réessayez'}`
  }
}

class QuestionExercise extends Exercise {
  constructor(title: string, private correct: string) {
    super(title)
  }

  check(answer: string): boolean {
    return answer.trim().toLowerCase() === this.correct
  }
}

const task = new QuestionExercise('Balise de paragraphe', 'p')
console.log(task.run(' P '))
console.log(task.run('div'))
Résultat
Balise de paragraphe: correct
Balise de paragraphe: réessayez

Définition et utilisation

#

Une classe abstraite est un gabarit pour d’autres classes. Vous ne pouvez pas créer son objet avec new, vous pouvez seulement l’étendre. Elle peut contenir des méthodes ordinaires avec du code, ainsi que des méthodes abstraites qui n’ont qu’une signature.

Chaque classe dérivée doit implémenter toutes les méthodes abstraites. Le compilateur veille à cela, si bien que la logique commune reste dans la classe de base, et les détails dans les descendants.

Contrairement à une interface, une classe abstraite peut contenir du code fonctionnel et des champs. Si vous avez seulement besoin d’un contrat sans implémentation, une interface suffit.

Syntaxe

#
Syntaxe
abstract class Name {
  abstract method(): type
  ordinaryMethod() { … }
}

Plus d’exemples

#
Impossible de créer une instance d’une classe abstraite
TypeScript
const generic = new Exercise('Quelque chose')
// Erreur : Cannot create an instance of an abstract class.

Bonnes pratiques

#
  • Une classe abstraite est utile quand les descendants partagent beaucoup de code commun. Pour un simple contrat, choisissez une interface.
  • Ne construisez pas de longues chaînes d’héritage. La composition de fonctions ou d’objets est souvent plus simple.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.