---
title: "Extraire une superclasse"
type: "refactoring-technique"
slug: "extract-superclass"
url: "http://localhost:3000/fr/extract-superclass.md"
category: "Dealing with Generalization"
description: "Problème : Vous avez deux classes qui partagent des champs et des méthodes communs. Solution : Créez une superclasse commune pour elles et déplacez-y tous les champs et méthodes identiques."
---
# Extraire une superclasse

> Problème : Vous avez deux classes qui partagent des champs et des méthodes communs. Solution : Créez une superclasse commune pour elles et déplacez-y tous les champs et méthodes identiques.

## Problem

Vous avez deux classes qui partagent des champs et des méthodes communs.

## Solution

Créez une superclasse commune pour elles et déplacez-y tous les champs et méthodes identiques.

## Why Refactor

Un type de duplication de code se produit lorsque deux classes accomplissent des tâches similaires de la même manière, ou accomplissent des tâches similaires de manières différentes. Les objets offrent un mécanisme intégré pour simplifier de telles situations grâce à l’héritage. Mais bien souvent, cette similarité passe inaperçue jusqu’à ce que les classes soient créées, ce qui oblige à mettre en place une structure d’héritage par la suite.

## Benefits

* Déduplication du code. Les champs et méthodes communs « vivent » désormais à un seul endroit.

## How to Refactor

1. Créez une superclasse abstraite.
2. Utilisez [Remonter un champ](/fr/pull-up-field), [Remonter une méthode](/fr/pull-up-method) et [Remonter le corps du constructeur](/fr/pull-up-constructor-body) pour déplacer les fonctionnalités communes vers une superclasse. Commencez par les champs, car en plus des champs communs, vous devrez déplacer les champs utilisés dans les méthodes communes.
3. Recherchez dans le code client les endroits où l’utilisation des sous-classes peut être remplacée par votre nouvelle classe (comme dans les déclarations de type).
## Relations

**Similar techniques**

- [Extraire l'interface](/fr/extract-interface.md)

**Eliminates smells**

- [Code dupliqué](/fr/smells/duplicate-code.md)

