Cadena de objetos polimorfismo

user_1330:

Por favor, no llegué a entender el polimorfismo.

teniendo este ejemplo:

Object o = new String ("foo");

No puedo hacer

o.substring (1,2)

¿alguien puede explicar este problema a mí?

Makoto:

Esto es una consecuencia del principio de sustitución de liskov , que establece (resumido):

Si S y T son objetos, y T es un subtipo de S, entonces T se puede usar donde S se espera.

String -es un subtipo de Object, por lo que si sus Espera operación de asignación Object, entonces estará feliz de aceptar Objecto cualquiera de sus subtipos.

(Nota: Object no es una String Todos. StringS son Objects, pero no todos los Objects son Strings.)

Esto no quiere decir que usted consigue el acceso a cualquiera de los métodos del subtipo. Teniendo en cuenta la jerarquía de herencia, una Objectno tiene ninguna pista acerca de cualquiera de los métodos específicos de sus hijos, ni puede - no hay manera de informar a una clase ancestro de las capacidades de su descendiente. Debido a que Objectno tiene substringmétodo asociado con ella, su código se traduce correctamente en un fallo de compilación.

(Y debe, dado que Objectes el antepasado de todas las clases. No hay ninguna garantía de que cualquiera fijada Objectes un String.)

El consejo de pie es no utilizar un exceso inspecific tipo de objeto (a medida que avanza en la cadena de jerarquía, las capacidades se vuelven menos específico - que perder funcionalidad a medida que suben a Object) para lograr algo específico para un tipo más específico.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=205168&siteId=1
Recomendado
Clasificación