Por que a covariância do tipo retorno é imposta para métodos estáticos ocultos?
Este código não será compilado devido aoString
tipo de retorno dostaticMethod
noChild
.
class Parent {
static void staticMethod() {
}
}
class Child extends Parent {
static String staticMethod() {
return null;
}
}
Eu sei que o JLS 8 em §8.4.8.3, "Requisitos em Substituir e Ocultar" diz:
Se uma declaração de método d1 com o tipo de retorno R1 substituir ou ocultar a declaração de outro método d2 com o tipo de retorno R2, d1 deverá ser substituível pelo tipo de retorno (§8.4.5) para d2, ou ocorrerá um erro em tempo de compilação.
Minha pergunta é qual tem sido a motivação para essa verificação em tempo de compilação no caso específico de métodos estáticos, um exemplo que ilustra que a falha em fazer essa verificação durante a compilação produziria problemas seria ideal.