Por que o tipo de retorno do mesmo nome-método deve ser o mesmo na subclasse Java?

Minha formação é em C ++. Eu sei o que está sobrecarregando e qual é a substituição. Quero perguntar se não quero substituir o método do pai e quero criar meu próprio método com tipo de retorno diferente e mesmo nome, por que o java não me permite fazer isso?

Exemplo:

class X{
    public void k(){

    }
}
public class Y extends X{
    public int k(){
        return 0;
    }
}

Por que o java não aplica o conceito de ocultação aqui? classe média Y deve ocultar o método de X. qual é a razão por trás?

C ++ aplicando o conceito Hiding.

#include <iostream>
class A{
    public:
        void k(){
            std::cout << "k from A";
        }
};
class B:public A{
    public:
        int k(){
            std::cout << "k from B";
            return 0;
        }
};
int main(){
    B obj;
    obj.k();

    return 0;
}

questionAnswers(1)

yourAnswerToTheQuestion