Métodos / Variables estáticos de referencia en Java desde una instancia

¿Puede alguien explicarme por qué Java le permite acceder a métodos estáticos y miembros desde una instancia? Un mal ejemplo, si tengo un objeto llamado RedShape y tiene un método estático llamado getColor () que devuelve "rojo", ¿por qué java te permite llamar al método estático desde una instancia de RedShape? Para mí, esto parece violar algunos de los conceptos centrales del diseño de lenguaje OO. Por lo menos, debe venir con una advertencia del compilador.

Gracias por adelantado.

Editar:

En particular, pregunto cuando tienes algo como

RedShape test = new RedShape();
test.getColor();

donde getColor es un método estático de la clase RedShape. Esto no tiene ningún sentido que esté permitido y no da una advertencia del compilador en la línea de comandos a través de javac. Veo que está "muy desanimado", pero tenía curiosidad por el hecho de que hubiera una razón técnica o razonable detrás de por qué se permite "porque C ++ lo permite".

Respuestas a la pregunta(5)

Su respuesta a la pregunta