bloque3:polimorfismo
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| bloque3:polimorfismo [06/03/2018 09:26] – [Herencia: Polimorfismo] Fernando Valdeón | bloque3:polimorfismo [16/09/2024 20:53] (actual) – editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== Herencia: Polimorfismo ====== | ====== Herencia: Polimorfismo ====== | ||
| - | El **polimorfismo** es otro de los pilares de la programación orientada a objetos, junto al **encapsulamiento, | + | El **polimorfismo** es otro de los pilares de la programación orientada a objetos, junto al **encapsulamiento, |
| - | Básicamente consiste en acceder a una subclase mediante un tipo de datos de su superclase. | + | Básicamente consiste en acceder a métodos de una subclase mediante un tipo de datos de su superclase. |
| ===== Concepto de polimorfismo ===== | ===== Concepto de polimorfismo ===== | ||
| - | Viene del término de biología en el que un organismo puede tener diferentes formas. En programación orientada a objetos podemos tener un aparentemente un objeto que se comporta de modo distinto. | + | Viene del término de biología en el que un organismo puede tener diferentes formas. En programación orientada a objetos podemos tener aparentemente un mismo objeto que se comporta de formas distintas. |
| - | Para explicar esto vamos a crear 3 clases: Vehiculo, Coche y Moto | + | De una forma resumida se puede decir que consiste en realizar un casting entre objetos: __una variable de una superclase puede almacenar referencias de objetos de sus subclases__. Podemos usar una variable de una superclase para acceder desde ella a métodos sobrescritos en la subclase. |
| + | |||
| + | Para explicar esto vamos a crear 3 clases: Vehiculo | ||
| <code java> | <code java> | ||
| public Class Vehiculo{ | public Class Vehiculo{ | ||
| Línea 14: | Línea 16: | ||
| | | ||
| ... | ... | ||
| - | | ||
| - | this.numRuedas = numRuedas; | ||
| - | this.potencia = potencia; | ||
| - | this.matricula = matricula; | ||
| - | } | ||
| | | ||
| Línea 35: | Línea 32: | ||
| public class Coche extends Vehiculo{ | public class Coche extends Vehiculo{ | ||
| | | ||
| - | + | ... | |
| - | | + | |
| - | super(matricula, | + | |
| - | this.numPuertas = numPuertas; | + | |
| - | + | ||
| - | | + | |
| - | | + | |
| - | } | + | |
| - | + | ||
| | | ||
| | | ||
| Línea 55: | Línea 45: | ||
| public class Moto extends Vehiculo{ | public class Moto extends Vehiculo{ | ||
| | | ||
| - | + | ... | |
| - | | + | |
| - | super(matricula, | + | |
| - | this.marca = marca; | + | |
| - | } | + | |
| - | + | ||
| - | | + | |
| - | return marca; | + | |
| - | } | + | |
| | | ||
| Línea 89: | Línea 71: | ||
| //Ejecuto el mismo método para los 3 vehiculos | //Ejecuto el mismo método para los 3 vehiculos | ||
| //El mismo método actúa de forma distinta | //El mismo método actúa de forma distinta | ||
| - | vehiculo1.mostrarEspecificaciones(); | + | vehiculo1.mostrarEspecificaciones(); |
| - | vehiculo1.mostrarEspecificaciones(); | + | vehiculo2.mostrarEspecificaciones(); |
| - | vehiculo1.mostrarEspecificaciones(); | + | vehiculo3.mostrarEspecificaciones(); |
| Línea 101: | Línea 83: | ||
| </ | </ | ||
| - | Yo puedo llamar al método '' | + | Se puede llamar al método '' |
| - | Sin embargo si desde una variable de la superclase '' | + | Sin embargo, si desde una variable de la superclase '' |
| - | Tampoco se permite | + | Tampoco se permite almacenar un objeto de la superclase en una variable de una subclase: |
| - | <code java> | + | <code java> |
| + | </ | ||
| ===== UpCasting ===== | ===== UpCasting ===== | ||
| Como hemos visto, podemos referenciar objetos de una subclase mediante variable de un superclase. | Como hemos visto, podemos referenciar objetos de una subclase mediante variable de un superclase. | ||
| - | <code java> | + | <code java> |
| + | vehiculo1 = new Coche();</ | ||
| Esto se conoce como **UpCasting, | Esto se conoce como **UpCasting, | ||
| Línea 130: | Línea 114: | ||
| Vehiculo vehiculo2 = new Moto(); | Vehiculo vehiculo2 = new Moto(); | ||
| - | //No puedo llamar al método | + | //No puedo llamar al método |
| vehiculo1.getNumPuertas(); | vehiculo1.getNumPuertas(); | ||
| Línea 184: | Línea 168: | ||
| También tenemos el método '' | También tenemos el método '' | ||
| + | <code java> | ||
| + | if(vehiculo.getClass() == Coche.class){ | ||
| + | | ||
| + | } | ||
| + | </ | ||
| ---- | ---- | ||
| (c) {{date> %Y}} Fernando Valdeón | (c) {{date> %Y}} Fernando Valdeón | ||
bloque3/polimorfismo.1520328379.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)
