Push Down Field

Symptom

A field on the parent class used by only one subclass — `Employee.quota` used only by `Salesperson`, ignored by everyone else.

Goal

A field used by only one subclass moves out of the parent and into that subclass.

Before the refactoring

class Employee {
quota; // only Salesperson uses this
}

After the refactoring

class Employee {}
class Salesperson extends Employee { quota; }
Example source: Illustrative example written for this site, not a quotation from any source.
Pressure

Every instance carries storage it doesn't use; readers can't tell from the parent's shape which fields apply; serialization carries dead weight.

Tradeoff

If the field is occasionally consulted in the parent for type checks, pushing it down forces awkward downcasts — verify usage first.

Relief

Other subclasses no longer carry storage they ignore; the parent's surface shrinks; the field's meaning becomes local.

Trap

Pushing down fields the parent occasionally consults for type checks or polymorphic dispatch — forces awkward downcasts at the parent's consumers.