Yo creo que te refieres a lo que se le conece en el mundo de la programacion orientada objetos como el polimorfismo.
El polimorfismo se refiere cuando un objeto puede cambiar a otro tipo de objeto, y esto solo pasa cuando se hacen herencias.
Ejemplo.Tengo ls sig. clases
class Animal{//Clase base
int NumeroDePatas;
bool EsOvipero;
string Nombre;
bool EsHembra;
}
La clase animal contiene caracteristicas de todos los animales
ahora, su pongamos que vamos hacer un animal nuevo.
//Creamos una herencia de la clase animal, para crear un
//Animal llamado Can
class Can extends Animal{
Perro(string NombredelAnimal,bool EsPerra){
super.NumeroDePatas = 4;
super.Nombre = this.NombredelAnimal;
super.EsHembra = this.EsPerra;
}
}
Ahora vamos a ver como un objeto Can se pude convertit en
un objeto aninmal;
//ceramos dos objetos de Can.
Can MiPerro = new Can("Sparky",false);
Can LaNoviaDeMiPerro = new Can("Fifi",true);
bool Reproducirse(string NombreDelHijo,Animal Hembra,Animal Macho){
//Verificamos que efectivamente se puedan reproducir
if(Hembra.EsHembra == true & Macho.EsHembra ==false){
System.out.println("Ha nacido el primogenito de "+Hembra.Nombre+" y su padre es "+Macho.Nombre+" y el hijo se llamo "+Nombre);
return true;
}
}
Como podras ver en los argumentos de Reproducirse
requiere de dos objetos tipo animal.
sin embargo Can es una herencia de Animal
Entonces podemos hacer lo siguiente.
Reproducirse("Spaky Jr",Miperro,LaNoviaDeMiPerro);
Solo asi se puede ser mutable.
Cualquier argumento que le pases a la funcion Reproducirse que no sea Animal o que no tenga una herencia de esta marca error de compilacion.