public function subclass(): SubClassMappingDefiner
    {
        $this->verifyDefinedClass();

        return new SubClassMappingDefiner(
            $this->orm,
            $this,
            function (callable $mappingLoader, MapperDefinition $subClassDefinition) {
                $subClassDefinition->verifyDefinedClass();
                $subClassName = $subClassDefinition->class->getClassName();

                if (!is_a($subClassName, $this->class->getClassName(), true)) {
                    throw IncompleteMapperDefinitionException::format(
                        'Invalid subclass mapper definition for: defined type must be a subclass of %s, %s given',
                        $this->class->getClassName(),
                        $subClassName
                    );
                }

                $this->subClassMappingFactories[$subClassName] = $mappingLoader;
            }
        );
    }