Laravel-Core: ¿Por qué Laravel almacena Alias varias veces?

Laravel en su núcleo en Application.php registra muchas de las implementaciones predeterminadas como esta:

'url' => ['Illuminate\Routing\UrlGenerator', 'Illuminate\Contracts\Routing\UrlGenerator'],

Lo que en efecto llamará al método siguiente dos veces

public function alias($abstract, $alias)
    {
        $this->aliases[$alias] = $abstract;
    }

resultando en los siguientes valores enContainer->aliases:

"Illuminate\Routing\UrlGenerator" => "url"
"Illuminate\Contracts\Routing\UrlGenerator" => "url"

Si luego llamo:$this->app->alias('url', 'App\Util\Portal\UrlGenerator'); incluso lo almacena por tercera vez en el contenedor en la matriz de alias:

"App\Util\Portal\UrlGenerator" => "url" 

Mi pregunta:

¿Por qué laravel los almacena a los dos o tres y no los anula? Debería ser suficiente para almacenar la clase concreta. Pero, ¿por qué laravel los almacena a los tres? ¿Cómo puede saber laravel, cuál resolver, cuando ahora uso App :: make ('url')? Laravel tiene ahora tres para elegir, una interfaz y dos implementaciones.

Respuestas a la pregunta(1)

Su respuesta a la pregunta