Private fields should not be used when: 1) Fields need to be accessed by child classes, 2) Public API requires field access, 3) Testing requires direct field access, 4) Fields are part of the class's contract, 5) Inheritance hierarchy needs field access, 6) When maximum flexibility is needed in class design.