Por que, se o método estático não envolve polimorfismo (ligação tardia), vejo erro de que o método estático não pode ser substituído
considere o seguinte código:
class A{
public static void m(Number n){
System.out.println("Number A");
};
}
class B extends A{
public static int m(Number n){
System.out.println("Number B");
return 1;
};
}
resultado:
java: m (java.lang.Number) em herditanceTest.B não pode substituir m (java.lang.Number) em herditanceTest.O tipo de retorno int não é compatível com void
Eu sei que métodos estáticos não envolvem polimorfismo, portanto, deduzo que a substituição é impossível para o meu código. Essa mensagem do compilador é estranha para mim.
Pelo que entendi, a substituição faz parte do polimorfismo. Eu me preparo para o scjp e tenho medo de cometer erros em questões familiares.
Esclareça este problema.
comportamento esperado para mim - mensagem sobre erro de sobrecarga
P.S1.
Eu li a principal pergunta popular sobre a substituição estática e não encontrei a resposta (
P.S2. De acordo com a resposta de Pshemo:
este código:
class Foo{
public static void m(Number n){
System.out.println("Number A");
};
public static int m(Number n){
System.out.println("Number B");
return 1;
};
}
saídas:
error: method m(Number) is already defined in class Foo
public static int m(Number n){
^
1 error
Para mim, essas situações são as mesmas. Mas o erro do compilador é diferente - estranho.