¿El upcasting es desde la referencia del objeto actual o desde el tipo de objeto real?
Me encontré con una pregunta en la escuela que pedía el tipo de conversión de tipos y si ocurrió un error.
InterfaceA obj = new ClassB();
ClassA obj2 = obj;
Entiendo que la primera línea causaría un error de tiempo de compilación debido a que ClassB es abstracto. Sin embargo, ¿funcionaría la segunda línea, convirtiendo de una clase real tipo ClassB con referencia de objeto InterfaceA, a ClassA? (si ClassB no es abstracto)
Dado el siguiente diagrama de clases UML:
davy.ai
Si ClassB no es abstracta, entonces la segunda línea debería funcionar como un ejemplo de upcasting. La referencia de objeto
obj
es de tipoInterfaceA
, pero el objeto real que se está haciendo referencia es de tipoClassB
. Sin embargo, dado queClassB
implementaInterfaceA
, puede ser convertido aInterfaceA
. Y dado queClassA
es una superclase deClassB
, también puede ser convertido aClassA
. Por lo tanto, la segunda línea de código debería funcionar sin errores.Es importante señalar que en este escenario,
obj2
no tendría acceso a ningún método o atributo específico deClassB
, solo aquellos heredados deClassA
.