Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema...

47
Introducci´ on Ejemplo odigo Cuestiones Tareas Sesi´ on 7. TEMA 9 Extensi´ on de clases: HERENCIA Fundamentos de Inform´ atica Jos´ e Jaime Noguera Noguera 6 de mayo de 2018

Transcript of Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema...

Page 1: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Sesion 7. TEMA 9 Extension de clases:HERENCIA

Fundamentos de Informatica

Jose Jaime Noguera Noguera

6 de mayo de 2018

Page 2: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Contenidos

1 Introduccion

2 Ejemplo

3 Codigo

4 Cuestiones

5 Tareas

Page 3: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Temario

Este es un tema extenso, ya que abarca dos temas del libro (el 8 y9 de la edicion 5, o 10 y 11 de la edicion 6).

Vamos a plantear un ejemplo bastante mas sencillo del que proponeel libro con el cual explicaremos la mayor parte de los conceptos deltema.

Page 4: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Taller

Presentamos el proyecto taller que consta de las clases:Vehiculo: Clase con 2 campos (matricula, marca), metodosget y un metodo para mostrar los campos.Coche: Subclase de Vehiculo. Anade un solo campo(numPuertas), un metodo get para dicho campo y un metodopara mostrar informacion.Moto: Subclase de Vehiculo. Anade un solo campo(soloArranquePatada) y un metodo para mostrar informacion.Taller: contiene un ArrayList de objetos Vehiculo, un metodopara anadir objetos a la lista y uno para mostrar lainformacion de los objetos.Lanzador: contiene el metodo main.

Page 5: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Diagrama de clases

Page 6: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Herencia

La herencia nos permite definir una clase como ampliacion deotra.Esto define una jerarquıa de clases (clase-subclase).Ventajas:

Evita la duplicacion de codigo favoreciendo su reutilizacion.Facilita el mantenimiento.Favorece la ampliabilidad.

Page 7: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Clase Vehiculo

Figura 1: Clase Vehiculo (parte 1)

Page 8: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Clase Vehiculo

Figura 2: Clase Vehiculo (parte 2)

Page 9: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Clase Coche

Page 10: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Clase Moto

Page 11: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Clase Taller

Figura 3: Clase Taller (parte 1)

Page 12: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Clase Taller

Figura 4: Clase Taller (parte 2)

Page 13: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Clase Lanzador

Page 14: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Subclase: propiedades

Para crear una subclase unicamente hay que incluir extendsNombreSuperClase al definir la subclase.En el constructor de la subclase hay que anadir una llamada alconstructor de la superclase con super(lista de parametros).Si no se incluye, Java inserta automaticamente super(). En esecaso, si la superclase no tiene un constructor sin parametrostendremos un error de compilacion.Desde la subclase, podemos utilizar directamente (sin notacionde punto) todos los metodos publicos de la superclase.Desde la subclase no podemos acceder a los campos privadosde la superclase. Para ello debemos utilizar metodos get y setpublicos.

Page 15: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Subtipos

Las clases definen tipos. El tipo definido por una subclase es subtipodel tipo de la superclase. Ası se forma una jerarquıa de tipos. Ennuestro ejemplo, Coche define un subtipo del tipo Vehiculo.

SUSTITUCIONPodemos usar un objeto de una subclase en cualquier lugar dondese requiera el tipo de la superclase (pero no a la inversa).

Observar que en el ArrayList listaVehiculos de la clase Taller, el tipode cada elemento es Vehiculo y sin embargo, podemos almacenartanto objetos tipo Vehiculo, como Coche o Moto.

Page 16: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Subtipos

Siguiendo nuestro ejemplo, las siguientes asignaciones serıan correc-tas:

Vehiculo vehiculo1=new Vehiculo(”BMW”,”4567ASD”);Vehiculo vehiculo2=new Coche(”Renault”,”1234ASD”,3);Vehiculo vehiculo3=new Moto(”Yamaha”,”1334ASD”,true);

Sin embargo, las siguientes son incorrectas:Coche coche1=new Vehiculo(”BMW”,”4567ASD”);Moto moto1=new Coche(”Renault”,”1234ASD”,3);

Page 17: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Subtipos

Las variables que almacenan tipos de objetos en Java son polimorfi-cas, lo cual significa que pueden almacenar objetos de diferentes ti-pos. En concreto, por el principio de sustitucion, una variable puedealmacenar objetos del tipo declarado o de cualquier subtipo a dichotipo. Este principio funciona igualmente en el paso de parametros.Si tenemos que pasar un parametro de un cierto tipo, tambien po-dremos pasarlo de cualquier subtipo.Observar el codigo del ejemplo, en contreto el ArrayList listaVehicu-los de la clase Taller.

Page 18: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Casting

Observar lo siguiente:Vehiculo vehiculo1=new Coche(”Seat”,”1111AAA”,3);Coche coche1;coche1=vehiculo1;La ultima asignacion nos da un error en tiempo de compilacion,ya que vehiculo1 es de tipo Vehiculo, aunque almacene un objetotipo Coche. ¿Como podemos solucionarlo? Indicando que realmentevehiculo1 es un objeto tipo Coche:coche1=(Coche) vehiculo1;A esto se conoce como casting o proyeccion de tipos.

Page 19: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Casting

Observar lo siguente:Vehiculo vehiculo1=new Coche(”Seat”,”1111AAA”,3);Moto moto1;moto1=(Moto) vehiculo1;La ultima asignacion nos da un error en tiempo de ejecucion (no entiempo de compilacion). Cuando se ejecuta, el objeto almacenado envehiculo1 es de tipo Coche, por lo que no se puede hacer un castinga tipo Moto y por tanto el programa terminara prematuramente.

Page 20: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Casting

Supongamos que tenemos lo siguiente:Vehiculo vehiculo1=new Coche(”Seat”,”1111AAA”,3);Si queremos utilizar el metodo getNumPuertas() no podemos po-ner vehiculo1.getNumPuertas() ya que vehiculo1 es de tipo Vehicu-lo y en dicha clase no existe ningun metodo getNumPuertas(). Seproduce un error en tiempo de compilacion. Debemos pues aplicarun casting de la siguiente manera:

((Coche)vehiculo1).getNumPuertas()

Ahora, ((Coche)vehiculo1) es un objeto de tipo Coche donde sıhay un metodo getNumPuertas() y por tanto no devuelve un erroren tiempo de compilacion. Notar que si realmente en vehiculo1 nohubiese un objeto tipo coche, obtendrıamos un error en tiempo deejecucion.

Page 21: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Tipo estatico y tipo dinamico de una variable

Tipo estatico es el tipo declarado en el codigo fuente.Tipo dinamico es el tipo del objeto almacenado actualmente en la

variable.

Por ejemplo:Vehiculo vehiculo1=new Coche(”Seat”,”1111AAA”,3);El tipo estatico de la variable vehiculo1 es Vehiculo, mientras quesu tipo dinamico es Coche.

Page 22: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Sustitucion de metodos. Polimorfismo.

En ocasiones interesa adaptar metodos de la superclase en la sub-clase. Esto se consigue mediante la sustitucion de metodos:

En la subclase se define un metodo con la misma signaturaque el de la superclase y reescribimos el cuerpo del metodo.Se ejecuta primero el metodo ”mas cercano” en la jerarquıade clases.Si se quiere ejecutar el metodo definido en la superclase desdela subclase se puede hacer mediantesuper.nombreDelMetodo(lista de parametos)

Polimorfismo de metodosLa misma llamada a metodo puede invocar diferentes metodosdependiendo del tipo dinamico de la variable utilizada.

.

Page 23: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Object y toString

Clase ObjectToda clase en Java es subclase de Object. Serıa la clase mas altaen la jerarquıa de clases.

Metodo toStringEl objeto Object tiene un metodo toString que devuelve unarepresentacion del objeto en forma de String(nombreDelObjeto@direccionDeMemoria). Esto puede utilizarsepara reescribirlo en las subclases a la hora de mostrar informacionpor pantalla. Ademas los metodos System.out.println ySystem.out.print llaman automaticamente a este metodo en casode no tener como parametro un String.

.

Page 24: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

equals y ==

Si comparamos dos objetos con == lo que hacemos es comprobarsi apuntan al mismo objeto. Si apuntan al mismo se devuelve truey si no false. El metodo equals basicamente hace lo mismo si com-paramos objetos (excepto en el caso de String que sı compara elcontenido).Si queremos comparar los contenidos de los objetos debemos prime-ro definir que significa para nosotros la igualdad entre dos objetosy posteriormente podemos sustituir el metodo equals para compa-rar lo que consideremos, o utilizar otro metodo para realizar dichacomprobacion.

Page 25: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

instanceof

Hay ocasiones que nos interesa comprobar el tipo que tenemos alma-cenado en una variable. Esto se hace con el operador instanceof quefunciona de la siguiente manera: objeto instanceof Clase, devuelvetrue si objeto es una instancia de Clase y false en caso contrario.Por ejemplo:Vehiculo vehiculo1=new Coche(”Audi”,”1223ABC”,5);boolean a=(vehiculo1 instanceof Coche);La variable a almacenara true, porque el tipo dinamico de vehiculo1es Coche.

Page 26: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Observando el codigo

Observa el codigo de nuevo y localiza donde se utilizan los conceptosvistos en este tema: sustitucion de metodos, polimorfismo, instan-ceof, casting, clases, subclases, toString, sustitucion de variables...La salida es la siguiente:

Page 27: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Pregunta

Dadas las clases:

public class A{

private int x;public A(int a){x=a;}

}

public class B extends A{

private int x;public B(int b){x=b;}

}

¿Compilan sin errores ambas clases?

Page 28: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Respuesta

La clase A compila sin errores, pero la B no. El motivo es queno hemos incluido una llamada al constructor de la superclase. Javainserta automaticamente super(); dentro del constructor de B, perodado que en A no se encuentra ningun constructor sin parametros,el compilador devuelve un error.

Page 29: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Pregunta

Dadas las clases:

public class A{

private int x;public A(int a){x=a;}public A(){}

}

public class B extends A{

private int x;public B(int b){x=b;}

}

¿Compilan sin errores ambas clases?

Page 30: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Respuesta

Ambas compilan sin errores, ya que en este caso sı se encuentra unconstructor sin parametros en la clase A.

Page 31: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Pregunta

Dadas las clases:

public class A{

private int x;public A(int a){x=a;}

}

public class B extends A{private int x;public B(int b){super(b);}}

¿Compilan sin errores ambas clases?

Page 32: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Respuesta

Ambas compilan sin errores, ya que en este caso sı se ha incluido lallamada a un constructor de la superclase con una lista de parametroscorrecta.

Page 33: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Pregunta

Si la clase A tiene un metodo con signatura:

public String metodo()

y b es una instancia de B, siendo B subclase de A, ¿puedo utilizarla sentencia b.metodo(); dentro del metodo main?

Page 34: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Respuesta

Si la clase A tiene un metodo con signatura:

public String metodo()

y b es una instancia de B, siendo B subclase de A, ¿puedo utilizarla sentencia b.metodo(); dentro del metodo main?

Sı, ya que toda subclase puede utilizar como propios los metodospublicos definidos en la superclase.

Page 35: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Pregunta

Si la clase A tiene un campo definido como:

private String nombre;

y B es subclase de A, ¿puedo acceder al campo nombre dentro delcuerpo de B sin utilizar un metodo get?

Page 36: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Respuesta

Si la clase A tiene un campo definido como:

private String nombre;

y B es subclase de A, ¿puedo acceder al campo nombre dentro delcuerpo de B sin utilizar un metodo get?

No, los campos definidos como private no son visibles para las sub-clases. Debemos utilizar un metodo publico get o bien definir elcampo como publico (aunque no es recomendable ya que disminuyela encapsulacion).

Page 37: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Pregunta

Dadas las clases:

public class A{public int a;public A(int a){this.a=a;}public int suma(int x){ return a+x;}

}

public class B extends A{public B(int b){super(b);}public int suma(int x){return x+5;}

}

¿Que contendra la variable c al ejecutar las siguientes lineas de codi-go?B b=new B(7);int c=b.suma(4);

Page 38: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Respuesta

¿Que contendra la variable c al ejecutar las siguientes lineas de codi-go?B b=new B(7);int c=b.suma(4);

Contendra 9, ya que b es un objeto de tipo B y se ejecutara antesel metodo suma definido en B.

Page 39: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Pregunta

Si Profesor y Alumno son dos subclases de Persona, ¿que asignacio-nes son correctas?:

Persona persona1, persona2;Profesor profesor;Alumno alumno1, alumno2;persona1=new Profesor();persona2=new Alumno();alumno1=persona2;alumno2=(Alumno) persona2;profesor= (Profesor) persona2;

Page 40: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Respuesta

Persona persona1, persona2;Profesor profesor;Alumno alumno1, alumno2;persona1=new Profesor(); Xpersona2=new Alumno(); Xalumno1=persona2; Error en tiempo de compilacion.alumno2=(Alumno) persona2; Xprofesor= (Profesor) persona2; Error en tiempo de ejecucion.

Page 41: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Pregunta

Si tenemos una clase Padre y una subclase Hija, dadas las siguienteslineas de codigo:Padre p, q;p=new Padre();q=new Hija();¿Cual es el tipo estatico y dinamico de cada una de ellas?

Page 42: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Respuesta

Si tenemos una clase Padre y una subclase Hija, dadas las siguienteslineas de codigo:Padre p, q;p=new Padre();q=new Hija();¿Cual es el tipo estatico y dinamico de cada una de ellas?

Tanto el tipo estatico como el dinamico de p es Padre, mientras queen q, el tipo estatico es Padre, pero el dinamico es Hija.

Page 43: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Pregunta

Si tenemos comprobar si el objeto a es instancia de la clase A,¿podemos utilizar lo siguiente?:

if(a instanceOf A){}System.out.println("a es instancia de A");

}else{System.out.println("a no es instancia de A");}

Page 44: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Respuesta

Si tenemos comprobar si el objeto a es instancia de la clase A,¿podemos utilizar lo siguiente?:

if(a instanceOf A){System.out.println("a es instancia de A");

}else{System.out.println("a no es instancia de A");}

Incorrecto, debemos utilizar instanceof.

Page 45: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Pregunta

Si A es subclase de B y B es subclase de C, ¿que asignaciones soncorrectas?:

C c=new A();C d=new B();B b= (A) c;B e= (B) d;A a=new B();B f=new A();B g= (B) c;A i= (A) d;

Page 46: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Respuesta

Si A es subclase de B y B es subclase de C, ¿que asignaciones soncorrectas?:

C c=new A(); XC d=new B(); XB b= (A) c; XB e= (B) d; XA a=new B(); Error en tiempo de compilacion.B f=new A(); XB g= (B) c; XConversion hacia arriba.A i= (A) d; Error en tiempo de ejecucion.

Page 47: Sesi´on 7. TEMA 9 Extensi ´on de clases: HERENCIA · 3 C´odigo 4 Cuestiones ... Este es un tema extenso, ya que abarca dos temas del libro (el 8 y 9 de la edici´on 5, o 10 y 11

Introduccion Ejemplo Codigo Cuestiones Tareas

Tareas

Realizar el test del tema 10 enjjnoguera.wordpress.com/uned-deniaLeer los Temas 10.3, 10.4 y 14 (edicion 5) o 12.3, 12.4 y 14(edicion 6) del libro: Clases abstractas. Manejo de errores yexcepciones.