1 / 43

Programación II Herencia y polimorfismo

Igor Santos Grueiro. Programación II Herencia y polimorfismo. ¿Somos capaces de crear un universo?. NO. Hay más relaciones entre clases. El 96 % del ADN de un chimpancé es igual al tuyo. Tenemos un ancestro común. o “clase padre”. Heredamos rasgos de nuestros padres.

zoltan
Télécharger la présentation

Programación II Herencia y polimorfismo

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Igor Santos Grueiro Programación IIHerencia y polimorfismo

  2. ¿Somos capaces de crear un universo?

  3. NO

  4. Hay más relaciones entre clases

  5. El 96 % del ADN de un chimpancé es igual al tuyo

  6. Tenemos un ancestro común

  7. o “clase padre”

  8. Heredamos rasgos de nuestros padres

  9. Y en java, ¿cómo se hereda?

  10. publicclassClaseHijaextendsClasePadre

  11. ¿qué se hereda?

  12. Se heredan atributos y métodos

  13. Una clase puede tener muchas clases hijas

  14. Pero sólo un padre Esto es en java

  15. La clase hija sólo puede acceder a atributos y métodos de la clase padre protectedypublic Se usará para atributos de la clase padre

  16. protected permite el acceso a los atributos y métodos calificados como tales desde la propia clase, desde clases hijas o derivadas o desde clases del mismo paquete

  17. publicclass Persona{ protected intdni; public intgetDni(){ return this.dni; } public voidsetDni(intdni){ this.dni = dni; } public Persona(intdni){ this.dni = dni; } }

  18. publicclass Empleado extendsPersona{ protected intantiguedad; publicEmpleado(intdni, int ant){ super(dni); this.antiguedad = ant; } } Es el constructor de la clase padre

  19. Todo objeto de una clase hija o derivada es un objeto de la clase padre o clase base

  20. Todo Empleado es una Persona, por ello la siguiente asignación es valida Persona p; Empleado e = new Empleado (45829821,2); p = e;

  21. Sin embargo, no seria correcta la asignación Persona p = new Persona(45829821); Empleado e = p; Error en tiempo de compilación

  22. Podríamos hacer un casting… Persona p = new Persona(45829821); Empleado e = (Empleado)p; Pero fallaría en ejecución

  23. El casting no se puede hacer de una variable de clase padre a una variable de clase hija, ni entre variables hijas de un mismo padre

  24. Pero aún hay más

  25. Todos somos personas pero ¿hablamos igual?

  26. Nuestro método hablar es polimórfico

  27. El polimorfismo es la propiedad que implica que un método se comporte de diferente forma en función del tipo de clase del objeto que le llama a su ejecución

  28. Figura Círculo Rectángulo

  29. publicclass Figura{ protecteddoubleposX; protecteddoubleposY; public double area(){ return 0; } }

  30. publicclass Circulo extends Figura { private double radio; public double area(){ return 3.14 * radio * radio; } }

  31. publicclassRectanguloextends Figura { private double base; private double altura; public double area(){ return base * altura; } }

  32. El método area de la clase Figura no estaba bien definido

  33. Un método abstracto es aquel que se declara en la clase padre o clase base, pero se implementa en una clase hija o derivada

  34. Toda clase que contenga un método abstracto se denomina clase abstracta Una clase hija que no redefine un método abstracto también es una clase abstracta

  35. publicabstractclass Figura{ //... public abstract double area; }

  36. No se pueden crear objetos de una clase abstracta Figura f = new Figura(); Error de compilación

  37. Hay que declarar los constructores porque son utilizados por sus clases derivadas

  38. Y, ¿si queremos saber la clase hija de un objeto de la clase padre?

  39. Figura r = newRectangulo(3,4); if (r instanceofRectangulo){ // Hacer algo } Evalúa si r es de tipo Rectangulo

  40. Y, ¿cuándo no queremos que se pueda heredar un clase?

  41. public finalclass Rombo extendsFigura{ } Indica que la clase no se puede heredar

  42. Podemos hacer lo mismo con los métodos

  43. Ahora sí podemos crear el universo

More Related