code: private function addField(Field $field)
      {
          $fieldName = $field->getName();
          if ($this->hasField($fieldName)) {
              $existingField = $this->getField($fieldName);
              if (!$existingField->isOverridable()) {
                  throw new FieldAlreadyDefined($this, $fieldName);
              }
  
              if (!$existingField->isCompatibleForOverride($field)) {
                  throw new FieldOverrideNotCompatible($this, $fieldName, $field);
              }
          }
  
          $this->fields[$fieldName] = $field;
          if ($field->isRequired()) {
              $this->requiredFields[$fieldName] = $field;
          }
      }
docs: @param Field $field
  
  @throws FieldAlreadyDefined
  @throws FieldOverrideNotCompatible