Transformación ascendente:
- De subclase a superclase, conversión automática de tipos
- Cuando la referencia de la clase principal apunta al objeto de la subclase, el objeto de la subclase sufrirá una transformación y se convertirá en el supertipo.
Transición descendente:
-
De la clase principal a la clase secundaria, conversión de tipo coercitiva
-
No todos los objetos pueden lograr una transformación hacia abajo, solo cuando este objeto es originalmente un objeto de subclase obtenido a través de una transformación hacia arriba, la transformación hacia abajo puede ser posible.
Cree tres clases, la relación de herencia se muestra en la figura:
class Fruit{
}
class Apple extends Fruit{
}
class Banana extends Fruit{
}
Fruit fruit = new Apple();//发生向上转型
Fruit fruit2 = new Banana();
Banana ba = (Banana) fruit2;//向下转型
//Banana ba_ = (Banana) fruit;
Preste atención a la línea comentada, la variable de fruta en sí es la transformación hacia arriba del objeto Apple, y se rechaza nuevamente, también es del tipo Apple y no se convertirá en el tipo Banana. Se puede compilar, pero se informará de una excepción durante la ejecución.
Exception in thread "main" java.lang.ClassCastException: polymorphic.Apple cannot be cast to polymorphic.Banana