---
title: "Descer Método"
type: "refactoring-technique"
slug: "push-down-method"
url: "http://localhost:3000/pt-br/push-down-method.md"
category: "Dealing with Generalization"
description: "Problema: Um comportamento implementado em uma superclasse é usado por apenas uma (ou algumas) subclasses? Solução: Mova esse comportamento para as subclasses."
---
# Descer Método

> Problema: Um comportamento implementado em uma superclasse é usado por apenas uma (ou algumas) subclasses? Solução: Mova esse comportamento para as subclasses.

## Problem

Um comportamento implementado em uma superclasse é usado por apenas uma (ou algumas) subclasses?

## Solution

Mova esse comportamento para as subclasses.

## Why Refactor

No início, um determinado método deveria ser universal para todas as classes, mas, na realidade, é usado em apenas uma subclasse. Essa situação pode ocorrer quando funcionalidades planejadas não se concretizam.

Tais situações também podem ocorrer após a extração (ou remoção) parcial de funcionalidades de uma hierarquia de classes, deixando um método que é usado em apenas uma subclasse.

Se você perceber que um método é necessário em mais de uma subclasse, mas não em todas, pode ser útil criar uma subclasse intermediária e mover o método para ela. Isso permite evitar a duplicação de código que resultaria de descer um método para todas as subclasses.

## Benefits

* Melhora a coesão da classe. Um método fica localizado onde você espera vê-lo.

## How to Refactor

1. Declare o método em uma subclasse e copie seu código da superclasse.
2. Remova o método da superclasse.
3. Encontre todos os lugares onde o método é usado e verifique se ele é chamado a partir da subclasse necessária.
## Relations

**Helps you do**

- [Extrair Subclasse](/pt-br/extract-subclass.md)

**Similar techniques**

- [Descer Campo](/pt-br/push-down-field.md)

**Opposite refactorings**

- [Subir Método](/pt-br/pull-up-method.md)

**Eliminates smells**

- [Herança Recusada](/pt-br/smells/refused-bequest.md)

