Polimorfismo

Contactar con el profesor

Sobrecarga y sobreescritura

class SobrecargaSobreescritura{
	static void Main(string[] args){
		Hijo4 h = new Hijo4();
		Hijo4.sobreEscritura("Se bienvenido ", "Pablo");
		Hijo4.sobreCarga(3);
	}
}
class Padre4{
	public static void sobreEscritura(String txtBienvenida, String nombre){
		Console.WriteLine(txtBienvenida + nombre);
	}
	public static void sobreCarga(String txtDespedida, String nombre){
		Console.WriteLine(txtDespedida + nombre);
	}
}

class Hijo4 : Padre4{
	//El tipo devuelto no debe cambiar.
	//los parámetros de entrada no deben cambiar
	//La accesibilidad no será más restrictiva que la del método original.
	//Si el método original es static, el método que hace el override, tambień debe serlo.
	public static void sobreEscritura(String txtBienvenida, String nombre){
		Console.WriteLine(txtBienvenida + "......" + nombre);
	}
	//El tipo de dato devuelto puede cambiar.
	//Los parámetros de entrada deben cambiar.
	//La accesibilidad puede ser más restrictiva que la del método original.
	//El número de checked expections arrojadas debe ser el mismo.
	public static int sobreCarga(int codigoDespedida){
		Console.WriteLine(codigoDespedida);
		return 4;
	}
}

Abstracción

Métodos abstractos

Tenemos una clase “Cosa” que tiene un método “botar”. Las clases “Ladrillo” y “Pelota” heredan de “Cosa”.

La clase Cosa tiene un método abstracto llamado “botar”. Es abstracto porque dependiendo de si instanciamos un ladrillo o una pelota habrá que sobrescribir el código para que bote de una forma determinada.

Un método abstracto es aquel que sólo tiene una declaración y no dispone de cuerpo. Está pensado para ser sobrescrito, luego no es posible utilizar el modificador private con un método abstracto.

Polimorfismo 1
Polimorfismo 2

Se declaran de la siguiente forma (quitando las llaves del cuerpo de la función y poneindo un ; en su lugar):

public void botar();

Clases abstractas

  • Si una clase tiene al menos un método abstracto, dicha clase debe ser abstracta.
  • Una clase que herede de una clase abstracta debe implementar todos sus métodos abstractos (no es necesario sobrescribir los métodos no abstractos).
  • Abstracto viene a significar “sin definir”.

Ejercicio – animales con clase abstracta

Implemente las clases del siguiente diagrama.

El constructor de la clase Animal llamará a los métodos “establecerSonido()” y “compararSonido()”

El método compararSonido() comprueba si la variable “sonido” es más larga que el sonido almacenado en la variable static “sonidoMasLargo”. Si es así, sobrescribe el valor de la variable con el nuevo valor.

El método establecerSonido() debe ser sobreescrito para asignar el valor del sonido que toque a la variable sonido.

Desarrolle una clase con el nombre Main, que contenga un método public static void main(String args[]), que al ejecutarse genere una instancia de cada clase de animal.

Luego, imprimir el valor de la variable estática sonidoMasLargo.

Polimorfismo 3

Interfaces

Una interface es una clase abstracta en la que todos los métodos serán métodos abstractos.

Una clase que implemente una interface también deberá implementar todos sus métodos. Si no deseamos que esto ocurra, podemos añadir a la interface el modificador abstract.

Una variable estática definida dentro de una interfaz será implícitamente definida como constante.

Una interfaz está pensada para ser sobrescrita, luego no tiene sentido utilizar modificadores privados dentro de una interfaz y no están permitidos.

interface Instrument{
	void play();//automáticamente público
}

class Clase : Instrument{
	static void Main(String[] args){
		Clase c = new Clase();
		c.play();
	}
  
	public void play(){
		Console.WriteLine("Jugar al baloncesto");
	}
}

Ejercicio – animales con interfaz

Implemente las clases del siguiente diagrama.

El método compararSonido() comprueba si el sonido que fue pasado en el constructor es más largo que el sonido almacenado en la variable static “sonidoMasLargo”. Si es así, sobrescribe el valor de la variable con el nuevo valor.

Desarrolle una clase con el nombre Main, que contenga un método public static void main(String args[]), que al ejecutarse genere una instancia de cada clase de animal e invoque a sus métodos “compararSonido”.

Luego, deberé imprimir en pantalla el sonido más largo realizado, almacenado en la variable estática sonidoMasLargo.

Polimorfismo 4

← Modificadores de acceso
Clases internas →

Aviso Legal | Política de privacidad