O favor acontece quando os dois candidatos se qualificam. O problema indicado na pergunta falha nesta conta, porque ela possui apenas uma opção de composição.
"A composição também pode usar generalização". Essa afirmação faz sentido para nós? Caso contrário, ainda não estamos prontos para entender a regra do "favor".
Por que estamos favorecendo a Composition é que a Composition oferece mais possibilidades de extensão / flexibilidade do que generalização. Essa extensão / flexibilidade refere-se principalmente à flexibilidade de tempo de execução / dinâmica (que é obtida com a combinação de interfaces e composição).
O benefício não é imediatamente visível. Para ver o benefício, você precisa aguardar a próxima solicitação de mudança inesperada. Portanto, na maioria dos casos, aqueles que aderiram à generalização falham quando comparados aos que adotaram a composição (exceto um caso óbvio mencionado posteriormente). Daí a regra. Do ponto de vista do aprendizado, se você pode implementar uma injeção de dependência com êxito, deve saber qual delas favorecer e quando. A regra ajuda você a tomar uma decisão quando não tiver certeza de qual escolher. Novamente, você deve poder ver as duas opções em primeiro lugar para favorecer uma.
Resumo: Composição: o acoplamento é reduzido apenas com algumas coisas menores que você conecta em algo maior, e o objeto maior apenas chama o objeto menor de volta. Geração: Do ponto de vista da API de terceiros, definir que um método pode ser substituído é um compromisso mais forte do que definir que um método pode ser chamado (vitória certa para a Generalização). E nunca esqueça que, com a composição, você também está usando generalização, a partir de uma interface em vez de uma grande classe. Infelizmente, todo o crédito vai para a composição.