Push Down Method

Symptom

A method on the parent class used by only one subclass — `Employee.quota()` used only by `Salesperson`.

Goal

Methods used by only one subclass live with that subclass, not on the shared superclass.

Before the refactoring

class Employee {
quota() { /* used only by Salesperson */ }
}

After the refactoring

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

Every other subclass carries surface it doesn't use; readers can't tell which methods are shared and which are subclass-specific; the parent's true interface is muddied.

Tradeoff

If the method is occasionally needed in the parent, pushing it down forces awkward type checks back at consumers — verify usage first.

Relief

The superclass surface shrinks; subclasses that don't need the method aren't burdened by it.

Trap

Pushing down methods used occasionally in the parent for type checks or polymorphic calls — forces awkward downcasts back at the parent's consumers.