sábado, 1 de mayo de 2010

Ocultamiento de atributos (Field hide another field)

Parece ambiguedad, pero no lo es, se trata del concepto de ocultamiento de atributos; el tema de este post es justamente ese: ¿cómo se deben considerar los atributos que tienen el mismo nombre en cierta jerarquía de clases?

Observemos el siguiente ejemplo (clic sobre la imagen para ampliarla):
Dos preguntas al respecto:

  • ¿Qué será lo que imprime en la salida estándar? y
  • ¿Por qué genera esa salida?

La salida es: 0, 2 y 1 que corresponden a los valores del atributo 'i' de cada objeto que fue creado (c, ca y cv).

Lo interesante acá es que estos objetos fueron declarados de una forma y fueron creados de otra; la verdad es que no quedaba más opción porque no se pueden crear objetos de una clase abstracta y menos de una interfaz >:o ... entonces se crean los tres objetos a partir de la clase CCar. Esta clase hereda de una clase e implementa una interfaz y, tanto en la clase abstracta como en la interfaz, cuentan con un atributo llamado 'i'. Por lo tanto, el atributo 'i' que va considerar será tomando en cuenta la forma en la que se declaró el objeto. Ahora, de forma natural, surge la pregunta de si este comportamiento se aplica de la misma forma cuando se trata de métodos .... pero eso será lo que revisaré en el siguiente post.

Eso es todo por ahora, fin de la transmisión ... que Dios los bendiga.

Bye