code: public Serializer registerAbstract(Class<?> abstractType, Class<? extends TypeSerializer> serializer) {
      registry.registerAbstract(abstractType, serializer);
      return this;
    }
docs: Registers an abstract type serializer for the given abstract type.
  <p>
  Abstract serializers allow abstract types to be serialized without explicitly registering a concrete type.
  The concept of abstract serializers differs from {@link #registerDefault(Class, TypeSerializerFactory) default serializers}
  in that abstract serializers can be registered with a serializable type ID, and types {@link #register(Class) registered}
  without a specific {@link TypeSerializer} do not inheret from abstract serializers.
  <pre>
  {@code
  serializer.registerAbstract(List.class, AbstractListSerializer.class);
  }
  </pre>
  
  @param abstractType The abstract type for which to register the abstract serializer. Types that extend
  the abstract type will be serialized using the given abstract serializer unless a
  serializer has been registered for the specific concrete type.
  @param serializer The abstract type serializer with which to serialize instances of the abstract type.
  @return The serializer.
  @throws NullPointerException if the {@code abstractType} or {@code serializer} is {@code null}