Vous êtes sur la page 1sur 4

SOBRECARGAR Y SOBREESCRITURA

Mtodos Sobrecargados (Overloaded) Argumento(s) Tipo devuelto (Return type) Debe cambiar No cambiar. Mtodos Sobrescritos (Overridden) No debe cambiar No cambiar excepto para covariant returns. Se puede reducer o eliminar Excepciones No cambiar. No se debe lanzar una nueva excepcin o ampliar la existente. Se puede hacer ms restrictiva

Acceso

No cambiar El tipo de referencia determina que versin de sobrecarga (basada en los tipos de argumentos declarados) ha sido seleccionada. Ocurre en tiempo de compilacin. El mtodo invocado todava es una invocacin virtual del mtodo, en tiempo de ejecucin, pero el compilador sabe la firma del mtodo que es invocado. As, en tiempo de ejecucin, el argumento emparejado ya se habr llevado a cabo, no solo en la clase en la que el mtodo reside

Invocacin

El tipo de objeto (el tipo de la instancia actual en la Heap) determina que mtodo es seleccionado. Sucede en tiempo de ejecucin.

Reglas a seguir para sobrescribir un mtodo:


- La lista de argumentos debe coincidir con el mtodo sobrescrito. - El tipo devuelto debe ser el mismo, o un subtipo de. - El acceso no puede ser ms restrictivo que el mtodo sobrescrito. - El acceso puede ser menos restrictivo que el mtodo sobrescrito. - Las instancias de los mtodos puede ser sobrescritos solamente si son herederos de la subclase. - El mtodo sobrescrito puede lanzar cualquier excepcin uncheked en tiempo de ejecucin. - El mtodo sobrescrito no debe lanzar excepciones checked que son nuevas o mas amplias que las declaradas. - El mtodo sobrescrito puede lanzar excepciones limitadas o menos excepciones. - No sobrescribir mtodos final. - No sobrescribir mtodos static. - Si un mtodo no puede ser heredado, no se puede sobrescribir.

Los mtodos sobrecargados:


- Deben cambiar la lista de argumentos. - Pueden cambiar el tipo devuelto. - Pueden cambiar los modificadores de acceso. - Pueden declarar nuevas excepciones o ampliar las existentes. - Un mtodo puede ser sobreescrito en la misma clase o en una subclase

package com.codingdojo.pomodoro; 02 public class Animal { 03 protected static int cont = 0; 04 protected int patas; 05 protected String comida; 06 protected String sonido; 07 08 public Animal(int patas, String sonido) { 09 this.patas = patas; 10 this.sonido = sonido; 11 ++cont; 12 } 13 14 public void come(String comida) { 15 this.comida = comida; 16 } 17 18 public int getCont() { 19 return cont; 20 } 21 22 public String toString() { return "Un " + getClass().getName() + " come: " + comida + ", "+ "tiene " + patas + " patas" + ", " + "y " + sonido; 24 } 23 25 }

package com.codingdojo.pomodoro; 02 public class Horse extends Animal { 03 public Horse(int patas, String sonido) { 04 super(patas, sonido); 05 } 06 07 // sobrecarga(overload) de operadores 08 public void come(String apple, String eno, String salt) { 09 comida = apple + ", " + eno + ", " + salt; 10 } 11 }

package com.codingdojo.pomodoro; 2 public class Dog extends Animal { 3 public Dog(int patas, String sonido) { 4 super(patas, sonido); 5} 6 7}

package com.codingdojo.pomodoro; 02 public class Cat extends Animal { 03 public Cat(int patas, String sonido) { 04 super(patas, sonido); 05 } 06 07 // sobreescritura(overridding) de operadores 08 public void come(String leche) { 09 comida = "un poco de: " + leche; 10 } 11 12 }

package com.codingdojo.pomodoro; 02 import java.util.ArrayList; 03 import java.util.List; 04 05 public class AnimalTest { 06 public static void main(String[] args) { 07 Animal animal = new Animal(0, "--"); 08 Horse horse = new Horse(4, "relincha"); 09 Dog dog = new Dog(4, "ladra"); 10 Cat cat = new Cat(4, "maulla"); 11 12 List<Animal> list = new ArrayList<Animal>(); 13 list.add(animal); 14 list.add(horse); 15 list.add(cat); 16 list.add(dog); 17 18 for (Animal animalito : list) { 19 if (animalito instanceof Horse) { 20 ((Horse) animalito).come("manzanas", "eno", "sal"); 21 }else if (animalito instanceof Dog) { 22 ((Dog) animalito).come("pienso"); 23 }else if (animalito instanceof Cat) { 24 ((Cat) animalito).come("Leche"); 25 }else { 26 animalito.come("lo que puede"); 27 } 28 29 System.out.println(animalito.toString()); 30 } 31 32 System.out.println("Numero de instacias de Animal: "+animal.getCont());

Salida de consola:
Un com.codingdojo.pomodoro.Animal come: lo que puede, tiene 0 patas, y -Un com.codingdojo.pomodoro.Horse come: manzanas, eno, sal, tiene 4 patas, y relincha Un com.codingdojo.pomodoro.Cat come: un poco de: Leche, tiene 4 patas, y maulla Un com.codingdojo.pomodoro.Dog come: pienso, tiene 4 patas, y ladra Numero de instacias de Animal: 4

Vous aimerez peut-être aussi