---
title: "Спуск поля"
type: "refactoring-technique"
slug: "push-down-field"
url: "http://localhost:3000/ru/push-down-field.md"
category: "Решение задач обобщения"
description: "Проблема: Поле используется только в некоторых подклассах. Решение: Переместите поле в эти подклассы."
---
# Спуск поля

> Проблема: Поле используется только в некоторых подклассах. Решение: Переместите поле в эти подклассы.

## Problem

Поле используется только в некоторых подклассах.

## Solution

Переместите поле в эти подклассы.

## Why Refactor

Поле, которое планировали сделать универсальным для всех классов, по факту используется только в некоторых подклассах. Такая ситуация может возникнуть, когда планируемые фичи так и не были реализованы.

Кроме того, такая ситуация может возникнуть после извлечения (или удаления) части функциональности из иерархии классов.

## Benefits

* Улучшает связность внутри классов. Поле находится там, где оно реально используется.
* При перемещении в несколько подклассов одновременно, появляется возможность развивать поля независимо друг от друга. Правда, такое действие создаёт дублирование кода, поэтому стоит спускать поля, только если вы действительно намерены использовать их по-разному.

## How to Refactor

1. Объявите поле во всех необходимых подклассах.
2. Удалите поле из суперкласса.
## Relations

**Helps you do**

- [Извлечение подкласса](/ru/extract-subclass.md)

**Similar techniques**

- [Спуск метода](/ru/push-down-method.md)

**Opposite refactorings**

- [Подъём поля](/ru/pull-up-field.md)

**Eliminates smells**

- [Отказ от наследства](/ru/smells/refused-bequest.md)

