He estado últimamente echando un ojo a la herencia, que ya sabía como funcionaba pero no en todos sus pelos y detalles.
E hilando con este tipo de instanciación:
Clase_1 miObjeto = new Clase2();
que ya había visto en alguna ocasión pero que no llegaba mucho a comprender como era posible eso, llegué a la conclusión de que el responsable de esa instanciación era la herencia, la cual permite hacer:
Clase_Padre miObjeto= new Clase_Hija();
(Estos son deducciones aún no probadas en ningún código. Si me equivoco por favor, explicarme entonces como puede si no haber instanciaciones de ese tipo)
Pero ahora que he llegado a esta conclusión, la pregunta que me surge es:
En qué tipo de ejemplo podría venir bien usar este tipo de instanciación?
¿Quizá en la reutilización de un objeto?
Quizá para casos como el siguiente?
Clase_Abuelo miUnicoObjeto=new Clase_nieta();
miUnicoObjeto.metodo_del_nieto();
miUnicoObjeto=new Clase_Padre();
miUnicoObjeto.metodo_private_del_padre();
miUnicoObjeto=new Clase_Abuelo();
miUnicoObjeto.metodo_private_del_abuelo();
¿Quizá por los métodos private? Porque para los métodos publicos, la clase nieta puede acceder a todos.
Sigo divagando sobre las posibilidades de poder hacer esto. Y ya que el padre no puede acceder a los atributos y métodos del hijo... quizá haciendo este tipo de instanciación si pueda, y una vez que saque los datos, se instancie en su propia clase. Porque si no va a instanciarse luego con el constructor del padre... ¿por qué no se declaró desde el principio como hijo?
Estoy bastante despistado con respecto a esta forma de instanciar que he visto en algunas ocasiones. Por qué se usa así, y en qué caso sería lo más aconsejable.