Cita: En lo personal y "conceptualmente" como lo entiendo, el comportamiento de 5.3 es coherente.
Si "A" hereda de "B", por más que sean elementos privados ("visibilidad" / "scope"), los elementos se heredan igual y son parte del objeto "A" (si usas el constructor de "B" tendrás acceso a los atributos privados de forma indirecta, demostrado entonces que esos atributos son "tuyos").
Por lo tanto, si preguntas si existe un elemento heredado y privado, la respuesta debería ser "si" (true), pero otra pregunta sería si "es accesible".
enriqueplace, justamente el comportamiento coherente sería el de la versión 5.2, no el de la 5.3.
fijate que en la 5.2 devuelve TRUE (lo correcto) y en 5.3 FALSE.
Cita: PD: de todas formas, nunca vi con buenos ojos este tipo de funcionalidades, cuanto más preguntas a un objeto sobre su composición, más rompes las abstracciones y dificultas el uso del polimorfismo (estrategia base de la POO).
Son herramientas de reflexividad que brinda el lenguaje (maneras de describir estructuras del lenguaje desde el lenguaje mismo). En realidad no debería ser habitual utilizar este tipo de cosas cuando estás programando el dominio de negocio. Pero si estás programando cosas que tienen que ver con cuestiones computacionales (un framework de persistencia de objetos por ejemplo) no está mal utilizarlas. Eso se llama hacer metaprogramación (meta significa en otro nivel conceptual).
En mi caso concreto es una parte del programa que tiene que guardar objetos en la base de datos, entonces necesita utilizar este tipo de cosas para conocer la estructura interna del objeto y luego guardarlo en una tabla de base de datos por ejemplo.
Obviamente la forma de persistir un objeto en una base de datos va a estar acoplada a su estructura interna, por lo que no hay forma de no "romper" el encapsulamiento.
Las facilidades reflexivas del lenguaje están buenas siempre y cuando se utilicen cuando corresponda.