TStrings y TStringList, son dos clases que nos permiten manejar una lista de cadena de caracteres. Aunque TstringList hereda e implementa los métodos virtuales y abstractos de TStrings. TStrings no se usa para crear una lista de cadenas de caracteres, ya que este no tiene los métodos necesarios para añadir o borrar elementos.
Es muy común declarar parámetros de un método, como una clase TStrings, la razón de eso es permitir el polimorfismo, es decir, suponiendo exista un método que trabaje, sólo con TStrings, entonces este podrá procesar el objeto, que se ha creado con TStringList o con cualquier descendiente de TStrings o TStringList, y si este método lo requiere, entonces podrá ejecutar algún método abstracto o virtual, implementado de manera diferente.
Otro detalle importante es que TStrings no contiene un campo que implemente una lista de cadenas, algo que si lo tiene TStringList, razón por la que no se suele usar TStrings para crear listas de cadena de caracteres.