---
title: "Подъём поля"
type: "refactoring-technique"
slug: "pull-up-field"
url: "http://localhost:3000/ru/pull-up-field.md"
category: "Решение задач обобщения"
description: "Проблема: Два класса имеют одно и то же поле. Решение: Переместите поле в суперкласс, убрав его из подклассов."
---
# Подъём поля

> Проблема: Два класса имеют одно и то же поле. Решение: Переместите поле в суперкласс, убрав его из подклассов.

## Problem

Два класса имеют одно и то же поле.

## Solution

Переместите поле в суперкласс, убрав его из подклассов.

## Why Refactor

Подклассы развивались независимо друг от друга. Это привело к созданию одинаковых (или очень похожих) полей и методов.

## Benefits

* Убивает дублирование полей в подклассах.
* Облегчает дальнейший перенос дублирующих методов из подклассов в суперкласс, если они есть.

## How to Refactor

1. Проверьте, что оба поля используются для одинаковых нужд в подклассах.
2. Если поля имеют разные названия, дайте им общее имя и замените все обращения к полям в существующем коде.
3. Создайте поле с таким же именем в суперклассе. Обратите внимание на то, что если поля были приватные (private), поле в суперклассе должно быть защищённым (protected).
4. Удалите поля из подклассов.
5. Возможно, имеет смысл использовать [самоинкапсуляцию поля](/ru/self-encapsulate-field) для нового поля, чтобы скрыть его за методами доступа.
## Relations

**Similar techniques**

- [Подъём метода](/ru/pull-up-method.md)

**Opposite refactorings**

- [Спуск поля](/ru/push-down-field.md)

**Eliminates smells**

- [Дублирование кода](/ru/smells/duplicate-code.md)

