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)