Laravel-Core: Por que o Laravel armazena aliases várias vezes?

O Laravel, em seu núcleo no Application.php, registra muitas das Implementações Padrão como esta:

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

Que chamará o método abaixo duas vezes

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

resultando nos seguintes valores emContainer->aliases:

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

Se eu ligar mais tarde:$this->app->alias('url', 'App\Util\Portal\UrlGenerator'); ele ainda armazena um triplo tempo no Container na matriz de alias:

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

Minha pergunta:

Por que o laravel armazena todos os dois ou três e não os substitui? Deve ser suficiente armazenar a classe de concreto. Mas por que o laravel os armazena todos os três? Como o laravel sabe qual deles resolver quando agora uso App :: make ('url')? O Laravel agora tem três opções, uma interface e duas implementações.

questionAnswers(1)

yourAnswerToTheQuestion