La abatimiento es a veces necesaria y apropiada. En particular, a menudo es apropiado en los casos en que uno tiene objetos que pueden o no tener alguna habilidad, y uno desea usar esa habilidad cuando existe mientras maneja objetos sin esa habilidad de alguna manera predeterminada. Como ejemplo simple, supongamos que String
se le pregunta a a si es igual a algún otro objeto arbitrario. Para que uno sea String
igual a otro String
, debe examinar la longitud y la matriz de caracteres de respaldo de la otra cadena. Si una String
se le pregunta si es igual a un Dog
embargo, no se puede acceder a la longitud de la Dog
, pero no tiene por qué; en cambio, si el objeto con el que String
se supone que se compara no es unString
, la comparación debe usar un comportamiento predeterminado (informar que el otro objeto no es igual).
El momento en que se debe considerar que la abatición es más dudosa es cuando se "sabe" que el objeto que se está lanzando es del tipo adecuado. En general, si se sabe que un objeto es a Cat
, se debe usar una variable de tipo Cat
, en lugar de una variable de tipo Animal
, para referirse a él. Sin embargo, hay momentos en que esto no siempre funciona. Por ejemplo, una Zoo
colección podría contener pares de objetos en ranuras de matriz pares / impares, con la expectativa de que los objetos de cada par puedan actuar unos sobre otros, incluso si no pueden actuar sobre los objetos de otros pares. En tal caso, los objetos en cada par aún tendrían que aceptar un tipo de parámetro no específico de modo que, sintácticamente , pudieran pasar los objetos desde cualquier otro par. Por lo tanto, incluso si Cat
'splayWith(Animal other)
El método solo funcionaría cuando other
fuera un Cat
, el Zoo
tendría que poder pasarle un elemento de un Animal[]
, por lo que su tipo de parámetro tendría que ser en Animal
lugar de Cat
.
En los casos en que la derrota sea legítimamente inevitable, uno debería usarla sin reparos. La pregunta clave es determinar cuándo se puede evitar sensacionalmente el rechazo y evitarlo cuando sea razonablemente posible.