Académique Documents
Professionnel Documents
Culture Documents
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.
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