Normalmente es legal crear variables de clase del tipo primario y asignarle objetos de un tipo secundario. La restricción en tales casos es que las personas que llaman solo pueden usar métodos y campos que son parte de la clase principal cuando se usa esa variable, los métodos extendidos y el estado no son visibles para los usuarios de la variable de clase primaria.
Por ejemplo: Tree foo = new Nonemptytree ();
Sin embargo, con las clases abstractas generalmente existe una regla de que no se pueden crear instancias (es decir, no se puede crear un objeto de la clase abstracta), por lo que la única forma legal de tener una variable del tipo de la clase abstracta es crear una instancia del niño clases que en sí mismas no son abstractas (implementa todos los métodos) para que no falte nada en tiempo de ejecución.
- ¿Pueden los cactus sobrevivir en zonas de alta precipitación o húmedas? Iban a prosperar en tales áreas o simplemente se verán afectados por las condiciones?
- ¿Por qué no deberíamos estar debajo de un árbol cuando truena?
- ¿Cuáles son las funciones más comunes de las hojas?
- ¿Los corales son animales, plantas o minerales?
- ¿Las hojas de la planta de lavanda se parecen a las hojas de las plantas de romero?
En otras palabras, no puede usar “nuevo árbol ()”.
En efecto, este es un polimorfismo forzado ya que la clase base abstracta no proporciona implementaciones de algunos de los métodos que declara, y depende de los niños proporcionarlos.