3. La capacidad para definir varios métodos utilizando el mismo nombre, pero usando
diferentes tipos y/o número de parámetros se llama…
a. Sobrecarga. VERDADERO
b. Sobrescritura. FALSO
c. Polimorfismo. FALSO
d. Encapsulación. FALSO
5. ¿Cuál de las siguientes afirmaciones NO es cierta sobre los diagramas de clase UML?
a. El símbolo del modificador de acceso "default" (i.e. por defecto, sin modificador)
es ~. VERDADERA
b. Las clases y métodos abstractos se representan en cursiva. VERDADERA
c. Lo habitual es escribir los atributos constantes en upper camel case, p.ej.
MaxNumPlayers, TimeElapsed, etc. FALSO
d. Los miembros estáticos se representan con un subrayado. VERDADERA
Página 1 de 36
c. Por defecto, todas las clases en Java heredan de la misma superclase. VERDADERA
d. Todas las anteriores.
8. En Java, para invocar a un método de la clase padre desde una subclase que sobrescribe
dicho método debemos usar la palabra clave (keyword):
a. super. VERDADERA
b. self. FALSO
c. this. FALSO
d. Ninguna de las anteriores. FALSO
9. Java no necesita un operador delete como sí utiliza C++ para liberar memoria porque…
a. el programador puede escribir sus propios destructores. FALSO
b. utiliza un gestor de memoria llamado garbage collector. VERDADERO
c. los objetos se ubican en el stack. FALSO
d. Todas las anteriores son ciertas. FALSO
13. ¿Cuál de las siguientes afirmaciones NO es cierta sobre los diagramas de clase UML?
a. El símbolo del modificador de acceso "protected" es +. FALSO
b. Las clases abstractas se representan en cursiva. VERDADERA
c. Los atributos finales se escriben todo en mayúsculas, p.ej. MAX_PLAYERS.
VERDADERA
d. Las interfaces se representan con el estereotipo <<interface>>. VERDADERA
14. Si en un diagrama de clases UML tenemos una clase A relacionada con la clase B y pegado
a la clase A hay un rombo de color negro, esto significa que…
a. entre ambas clases existe una asociación de agregación. FALSO
Página 2 de 36
b. entre ambas clases existe una asociación binaria. FALSO
c. entre ambas clases existe una asociación de composición. VERDADERA
d. entre ambas clases existe una asociación de dependencia. FALSO
15. ¿Cuál es el pilar de la POO que consiste en captar las características y comportamientos
que distinguen a un conjunto de objetos ignorando los detalles y centrarse en el problema
a alto nivel?
a. Abstracción. VERDADERA
b. Herencia. FALSO
c. Polimorfismo. FALSO
d. Encapsulación. FALSO
16. En Java, si tenemos una clase llamada Person, ¿cuál es la firma correcta de un método
que sobrescribe el método equals definido en la clase Object?
a. public boolean equals(Person other). FALSO
b. public boolean equals(Object other). VERDADERA
c. protected boolean equals(Person other). FALSO
d. protected static boolean equals(Object other) FALSO
17. En Java, una interfaz que permite que uno de sus métodos sea utilizado para ordenar de
manera natural los objetos de la clase que lo implementa es:
a. Sortable. FALSO
b. Orderable. FALSO
c. Comparable. VERDADERA
d. Ninguna de las anteriores. FALSO
20. En Java, ¿cuál de las siguientes afirmaciones es cierta respecto a la clase Object?
a. Sólo las clases de la API de Java heredan de Object. FALSA
Página 3 de 36
b. Tiene un método toString que devuelve un String con el nombre y valor de
todos los atributos de la clase. FALSA
c. Es la única clase que no es subclase de ninguna otra clase. VERDADERA
d. Tiene un método equals que compara objetos según el valor de sus atributos.
FALSA
21. En general en POO, ¿cuál de las siguientes afirmaciones es cierta?
a. Una clase final no puede implementar una interfaz. FALSO
b. Una clase final no puede heredar de otra clase. FALSO
c. Una clase final no puede ser a la vez abstracta. VERDADERA
d. Una clase final no puede tener métodos abstractos. VERDADERA
22. Si en un diagrama de clases UML tenemos una clase A relacionada con la clase B y pegado
a la clase A hay un rombo de color blanco, esto significa que…
a. entre ambas clases existe una asociación de agregación. VERDADERA
b. entre ambas clases existe una asociación binaria. FALSO
c. entre ambas clases existe una asociación de composición. FALSO
d. entre ambas clases existe una asociación de dependencia. FALSO
Página 4 de 36
d. Ninguna de las anteriores.
27. En un programa codificado en Java, supón que cierta clase tiene un atributo llamado
MESSAGE. Asumiendo el estándar de convención de nombres de Java, ¿qué tipo de
atributo es más probable que sea?
a. Una constante. VERDADERA
b. Un objeto de una clase. FALSO
c. Un atributo privado. FALSO
d. Una interfaz. FALSO
28. En Java…
a. si no se indica el método especial super dentro del constructor de una subclase,
se invoca implícitamente al método super que coincide con el constructor sin
argumentos de la superclase. VERDADERA
b. Si queremos invocar a un constructor de la superclase desde un constructor de la
subclase, debemos usar el método especial super y la invocación a dicho método
debe ser la primera instrucción del constructor de la subclase. VERDADERA
c. un miembro protected es visible tanto desde las clases del mismo paquete
como desde las subclases. VERDADERA
d. Todas las anteriores son ciertas.
30. En Java, ¿cuál de las siguientes afirmaciones es cierta respecto a la clase Object?
a. Sólo las clases de la API de Java heredan de Object. FALSO
b. Tiene un método toString que devuelve un String con el nombre y valor de
todos los atributos de la clase. FALSO
c. Es la única clase que no es subclase de ninguna otra clase. VERDADERA
d. Tiene un método equals que compara objetos según el valor de sus atributos.
FALSO
31. Cuando una clase oculta información a los programadores que la utilizan, dicha clase está
llevando a cabo un mecanismo conocido como...
a. herencia.
b. abstracción.
c. encapsulación.
d. polimorfismo.
32. En POO, ¿cuál de las siguientes afirmaciones es FALSA respecto a una clase final?
a. Puede ser instanciada. VERDADERA
b. Puede tener un constructor. VERDADERA
Página 5 de 36
c. No puede implementar una interfaz. FALSA
d. No puede ser heredada.
34. Si en un diagrama de clases UML tenemos una clase A relacionada con la clase B y pegado
a la clase A hay un rombo de color blanco, esto significa que…
a. entre ambas clases existe una asociación de agregación. VERDADERA
b. entre ambas clases existe una asociación binaria. FALSA
c. entre ambas clases existe una asociación de composición. FALSA
d. entre ambas clases existe una asociación de dependencia. FALSA
35. En Java, ¿cuál de las siguientes afirmaciones es CIERTA respecto a la clase Object?
a. Todas las clases en Java heredan implícitamente de Object. VERDADERA
b. Tiene un método compareTo que permite comparar dos objetos. FALSA
c. Los arrays tienen como superclase directa la clase Object. VERDADERA
d. Las afirmaciones A y C son ciertas.
36. ¿Cuál de las siguientes afirmaciones es CIERTA en Java?
a. Una clase abstracta está obligada a declarar métodos abstractos. FALSA
b. Una clase no puede ser declarada como protected a no ser que esté anidada en
otra clase. FALSA
c. Una clase no puede tener un atributo cuyo tipo sea la propia clase. FALSA
d. Todas las afirmaciones anteriores son falsas.
Página 6 de 36
Para las siguientes preguntas ten en cuenta el siguiente código Java:
Página 7 de 36
1. Cuando una clase reaprovecha métodos de otra clase para hacerlos suyos, dicha clase está
llevando a cabo un mecanismo conocido como…
a. abstracción.
b. herencia.
c. encapsulación.
d. polimorfismo.
4. Si en un diagrama de clases UML tenemos una clase A relacionada con la clase B mediante
una línea con puntas de flecha a ambos lados, esto significa que…
a. entre ambas clases existe una asociación de agregación bidireccional.
b. entre ambas clases existe una asociación binaria unidireccional.
c. entre ambas clases existe una asociación binaria bidireccional.
d. entre ambas clases existe una asociación de dependencia bidireccional.
5. En Java, ¿cuál es la superclase más alta en la jerarquía (es decir, la clase raíz) de cualquier
clase de tipo excepción?
a. Object
b. Throwable
c. Exception
d. Error
Página 8 de 36
public enum Teacher{DAVID, FRAN, CARLOS;}
y una variable myTeacher que ha sido declarada de tipo Teacher, ¿qué debe ser
escrito dentro de una instrucción condicional para comprobar que myTeacher es
DAVID?
a. myTeacher.equals("DAVID")
b. myTeacher.equals(Teacher.DAVID)
c. myTeacher == Teacher.DAVID
d. Las instrucciones B y C son correctas.
Página 9 de 36
Para las siguientes preguntas ten en cuenta el siguiente código Java:
10. Después de ejecutar la instrucción Cat[] cats = new Cat[5];, ¿cuál es el valor de
cats[0]?
a. null
b. undefined
c. 0 //cero
d. La dirección de memoria de un objeto de tipo Cat.
1. Cuando una clase tiene dos métodos con el mismo nombre pero con diferente listado de
parámetros, se dice que dicho método…
a. está sobrescrito.
b. está sobrecargado.
Página 10 de 36
c. es abstracto.
d. es virtual.
2. En POO, ¿cuál de las siguientes afirmaciones es FALSA respecto a una clase abstract?
a. Debe tener, al menos, un método abstracto.
b. Puede tener un constructor.
c. Puede implementar una interfaz.
d. Puede ser superclase de otra clase.
4. Si en un diagrama de clases UML tenemos una clase A relacionada con la clase B y pegado
a la clase A hay un rombo de color negro, esto significa que…
a. entre ambas clases existe una asociación de agregación.
b. entre ambas clases existe una asociación binaria.
c. entre ambas clases existe una asociación de composición.
d. entre ambas clases existe una asociación de dependencia.
Página 11 de 36
a. Las excepciones tipo unchecked deben ser obligatoriamente capturadas o
lanzadas explícitamente hacia arriba.
b. Podemos tener clases de tipo excepción personalizadas para el dominio de nuestro
programa.
c. La clase Exception es un tipo de excepción checked.
d. Un bloque try debe tener, como mínimo, un bloque catch.
Página 12 de 36
1. En Java, una clase creada por nosotros no es subclase de una superclase a menos que la
definamos con la palabra reservada extends.
Falso.
Falsa
El operador new crea un objeto en una dirección de memoria concreta del heap. Esto hace que
ambos string no apunten al mismo sitio de memoria y por tanto no sean iguales. Comparamos la
dirección de memoria.
s1 es un objeto que está en el heap y s2 está en el String Pool. Sus direcciones de memoria son
diferentes, por lo que la comparación da false, ya que == compara direcciones de memoria/objetos.
Si se hubiera hecho s1.equals(s2) entonces el resultado sí hubiera sido true.
Falso.
Crea un array con sus casillas a null. Para crear los objetos se debe ir casilla por casilla
instanciado el correspondiente objeto.
4. En Java, tanto los métodos declarados como private como aquellos declarados como
static no pueden ser sobrescritos.
Verdadera
Página 13 de 36
En el caso de declararlo private no sería visible en las subclases y, por lo tanto, no podría ser
sobrescrito.
Un método private no puede ser sobrescrito porque ni tan siquiera es visible desde la subclase.
En el caso de los métodos static, éstos pertenecen a la clase, no al objeto en sí, por lo que
pueden invocarse sin necesidad de crear ninguna instancia/objeto. Por este motivo, no tiene
sentido que se pueda sobrescribir
5. En Java, la siguiente instrucción dentro de una clase crea un método que no puede ser
sobrescrito:
Verdadera.
Al ser declarado como final, entonces no se puede sobrescribir en una subclase. Sí se puede
sobrecargar.
6. En Java una clase puede tener varios métodos static con el mismo nombre.
Verdadera.
Sí, siempre y cuando haya diferencia en la cantidad de parámetros que reciben, en su tipo o en
el orden.
Gracias a la sobrecarga se puede tener varios métodos con el mismo nombre, pero debe
cambiar el número y/o tipo de los parámetros.
7. El tipo dinámico de una variable es el tipo del objeto que está actualmente almacenando
dicha variable.
Verdadera.
El tipo con el que es declarada una variable es el tipo estático, mientras que el tipo del objeto
que se le asigna, es el tipo dinámico de la variable.
Página 14 de 36
8. Si B es una subclase de A, entonces podemos hacer un cast para transformar un objeto de
tipo A en un objeto de tipo B.
Falso.
El tipo del objeto no cambia por hacer un cast. Lo único que cambia es la referencia o variable
cuyo tipo es de nivel superior.
9. En Java, si el método toString() es sobrescrito en una clase, éste debe ser declarado
obligatoriamente como public.
Verdadero
Debe ser igual o menos restrictivo que el modificador de acceso declarado en la superclase.
10. En Java, la siguiente instrucción dentro de una clase crea un atributo compartido por todos
los objetos creados para esa clase cuyo valor puede ser modificado cuando se desee:
private static final int MAX = 1000;
Falso
No se puede modificar porque está declarado como final y por tanto actúa como constante.
Es cierto que el atributo MAX es compartido por todos los objetos de la clase, pero no puede
ser modificado porque es final.
11. En Java, se puede declarar una variable cuyo tipo sea una interfaz, pero no podemos crear
un objeto de ese tipo.
Verdadero
Página 15 de 36
Una interface no tiene constructores ni destructores.
12. En Java, dada una clase A con un atributo privado attr y dada una clase B que hereda de
la clase A, un objeto de la clase B contendrá un atributo attr.
Verdadero
Es heredado por la subclase pero al ser definido private no accesible directamente. Tendrá que
utilizar algún método setter/getter.
Lo contendrá, pero no podrá acceder a él directamente, tendrá que usar algún getter/setter.
El main invoca foo() y éste llama a bar() que lanza una excepción con el mensaje "Wee!" que a
su vez es propagado por foo(), así pues "Foo!" nunca se ejecuta el println del método foo().
Ahora estamos en el main, concretamente en el catch que coge la excepción lanzada desde
bar(), imprime el texto "Wee!" y posteriormente ejecuta el println que hay al final del método
main.
Página 16 de 36
d. Todas las subclases de Customer deben codificar el método buy.
Opción C.
El atributo name es private, por lo que no es accesible/visible desde fuera de la propia clase
Customer.
Sí que puede ser heredada, porque para no poder ser heredada debería haber sido declarada
como final.
Asimismo, las subclases de Customer no están obligadas a codificar el método buy, ya que
pueden ser abstractas o delegar dicha codificación a una subclase, es decir, a una subsubclase
de Customer.
Opción d.
Si attribute es public, entonces es accesible desde cualquier lugar del programa y, por lo tanto,
imprime "X's attribute is 3".
Página 17 de 36
2. Queremos guardar en un atributo de la clase Shoe (zapato) el número de ejemplares que
tenemos en el almacén para las diferentes medidas de pie. Es decir, dado un zapato
queremos saber que del número 39 tenemos 10 ejemplares de ese zapato, del 40
tenemos 2, etc. De hecho, la clase Shoe tiene el siguiente método: public int
getQuantityBySize(int size) que devuelve el número de ejemplares del zapato
para la medida solicitada. Cabe decir que la medida más pequeña que tenemos de
cualquier zapato es el 21. Sabiendo esto, ¿qué estructura de datos usarías para guardar la
colección de ejemplares?
a. Un ArrayList.
b. Un array simple.
c. Un HashMap.
d. Un TreeSet.
Opción c.
Un HashMap es la opción ideal, porque accedemos por tamaño de pie (clave - Integer) y el
valor es el número de ejemplares (como Integer).
Un ArrayList no podría ser una solución, pero deberíamos jugar con una fórmula matemáticas,
p.ej. size-21. Así en la casilla 0 están los ejemplares 0.
Un array simple sería lo mismo que el ArrayList pero hay un problema con el tamaño de la
estructura, que es finita. Tanto el ArrayList como el array con la solución de la resta, tenemos
un problema si en un futuro queremos cambiar el tipo de size de int a float, para tener el
tamaño 21.5.
Finalmente, TreeSet no es adecuado porque no tiene acceso directo a un objeto (i.e. acceso
aleatorio), se debe usar un iterador.
Opción c.
Se ejecuta C, que es extensión de B, por lo tanto se ejecuta B, que es extensión de A, por tanto
se ejecuta la línea de A, después vuelve a B, se ejecuta la línea de B y después a C, donde se
ejecuta la línea de C.
Es decir, A B C. El main invoca al constructor de C, pero todo constructor, lo primero que hace,
es invocar al constructor por defecto (sin argumentos) de su superclase, así pues, invoca a B() y
éste a su vez invoca a A(). Así pues, primero se imprime A, luego B y después C.
Página 18 de 36
//Escribe aquí tu justificación (brevemente).
Opción C.
Primero imprime el valor inicializado que es 3. Después D.value cambia a 4 y cuando creamos
un nuevo objeto, el valor suma uno más, por tanto 5, e imprime ese valor llamando al value de
la clase o al value del objeto de la clase, porque value al ser static pasa a ser atributo de clase.
Es decir: 3, 5 y 5. Hay que tener en cuenta que value es static y por lo tanto es de la clase, no
de la instancia. Línea 1 imprime 3. Luego el valor es 4. El constructor D lo incrementa, vale 5,
luego se imprime dos veces 5.
a. 4
b. 3
c. 8
d. 0
Opción B.
HashMap no permite claves duplicadas, si valores duplicados. Por lo que la línea “Andalucía”,
“Sevilla”, no la considera.
P1. B. El put que añade en la clave Andalucía el valor Sevilla machaca el valor Cádiz que hay en
la clave Andalucía. Por lo tanto, hay tres claves (Andalucía, Catalunya y Comunidad de Madrid)
y, por lo tanto, 3 valores (objetos) en la última instrucción:
1. Una clase Plane (avión) debe tener una estructura de datos que almacene los pasajeros
que están a bordo, independientemente de su asiento. Dependiendo del vuelo el avión
transportará más o menos pasajeros. La utilidad de la estructura es saber cuántos
pasajeros hay a bordo e imprimir un listado con los pasajeros que hay a bordo –ordenado
por sus nombres y apellidos– antes de iniciar el vuelo. Obviamente, un pasajero no puede
estar dos veces en el avión. ¿Qué estructura de datos utilizarías y por qué?
a. ArrayList
Página 19 de 36
b. HashMap
c. TreeSet
d. Array
B. Una HashMap sí controla la duplicidad de objetos, pero necesitamos una key que no
TreeMap.
2. ¿Cuál de las siguientes instrucciones cambia SÓLO la última letra de una cadena de texto
(i.e. String) por el símbolo '*'?
a. text.replace(text.charAt(text.length()-1), '*');
b. text.lastIndex(text.length()-1, '*');
c. text.replace(text.length(), "*");
d. Ninguna de las anteriores.
Es la D.
p*t*t*
La opción C estaría mal porque se le pasa la longitud del texto como entero, no
funcionaría.
Página 20 de 36
offices.stream()
.forEach(System.out::println);
Página 21 de 36
Parte 3 (30%) – Preguntas con respuesta abierta (hay que justificar la respuesta).
Considera el siguiente código para responder a TODAS las preguntas que se formulan en esta
parte de la prueba:
Página 22 de 36
public static void main(String[] args) {
System.out.println(diego.getId());
pedro = (Chihuahua)diego;
diego.setBark("bfff");
System.out.println(pedro.bark());
System.out.println(diego);
System.out.println(pedro);
Para cada pregunta escribe tu respuesta en el recuadro que verás a continuación de cada una
de ellas. Además, justifica brevemente tus respuestas.
El valor 2. El atributo id de la clase Dog es static, por lo que es compartida por todas las
instancias. Este atributo se incrementa en el constructor de Dog que es llamado 2 veces, desde
el constructor de Chihuahua a través del método especial super.
System.out.println(d);
Página 23 de 36
¿Qué se mostrará por pantalla?
Para cada pregunta escoge la respuesta correcta (SÓLO HAY UNA). Además, en los recuadros
que verás, justifica brevemente tus respuestas. Indica tus respuestas en la siguiente tabla:
Pregunta 1 2 3
Respuesta B C D
1. Queremos crear un programa que cuente cuántas veces aparecen las diferentes palabras
que contiene un fichero de texto. Por ejemplo, la palabra "patata" sale 5 veces, la
palabra "el" aparece 20 veces, etc. ¿Qué estructura de datos utilizarías y por qué?
a. ArrayList
b. HashMap
c. LinkedList
d. TreeSet
número de apariciones.
2. ¿Cuál de las siguientes instrucciones obtiene la primera letra de una cadena de texto (i.e.
String)?
a. char letter = text.charAt(1);
b. char letter = text[0];
c. char letter = text.substring(0,1).charAt(0);
d. char letter = text.substring(0,1)[0];
Página 24 de 36
C. El substring se queda con la primera letra y con charAt accedemos al índice 0, único índice
que tiene el text después del substring y lo devolvemos como char.
Las opciones B y D son incorrectas porque intentan acceder a un String con [], esto no
es posible.
empiezan en cero.
.count());
D. Filtra los valores superiores o iguales a 250, es decir, 300, 400 y 250. Luego
Página 25 de 36
Parte 3 (30%) – Preguntas con respuesta abierta (hay que justificar la respuesta).
Considera el siguiente código para responder a TODAS las preguntas que se formulan en esta
parte de la prueba:
Página 26 de 36
Supón que hemos ejecutado el siguiente código:
System.out.println(diego.bark());
System.out.println(marina);
Para cada pregunta escribe tu respuesta en el recuadro que verás a continuación de cada una
de ellas. Además, justifica brevemente tus respuestas.
El método bark no está definido en Dog, por lo que no se puede llamar desde un
atributo con tipo estático Dog. Hay que hacer un casting para resolver el problema:
System.out.println(((Chihuahua)diego).bark());
2. Imagina que la línea coloreada en rojo ha quedado corregida, ¿di qué ocurre con las líneas
coloreadas en amarillo? Es decir, haz la traza de dicho código.
El constructor de Chihuahua llama al de Dog mediante super y éste llama a setBark que lanza
una excepción al ver que sound es de tamaño 0, por lo que lanza una excepción que es
capturada en el constructor. El constructor imprime: Dog constructor: Bark Error!!!
Página 27 de 36
Se ejecuta la segunda línea coloreada en amarillo:
Debemos añadir el método compareTo ya que al implementar la interfaz Comparable ésta nos
obliga a sobreescribirlo. El método compareTo debe ser público y devolver un entero.
Para cada pregunta escoge la respuesta correcta (SÓLO HAY UNA). Además, en los recuadros
que verás, justifica brevemente tus respuestas. Indica tus respuestas en la siguiente tabla:
Pregunta 1 2 3
Respuesta A C C
1. Imagina que para cada estudiante tenemos un fichero de texto que contiene sólo las notas
numéricas que ha obtenido a lo largo del semestre. Queremos crear un programa que lea
dichas notas del fichero, las almacene en una estructura de datos y a continuación calcule
un conjunto de estadísticas, p.ej. media, moda, mediana, etc. Este programa debe
funcionar para cualquier asignatura y, cada asignatura, puede tener un número diferente
de actividades (i.e. de notas por estudiante) ¿Qué estructura de datos utilizarías y por
qué?
a. ArrayList
b. HashMap
c. LinkedList
d. TreeSet
La mejor opción es la A porque como sólo vamos a añadir elementos y una vez añadidos sólo
los vamos a consultar, pues con un ArrayList es una buena opción. Es mejor usar un ArrayList
que ya que es una estructura que ocupa menos espacio en memoria al basarse en un array y
no una lista doblemente enlazada como hace LinkedList. Además si quisiéramos añadir nuevos
elementos, pues podemos añadirlos
Página 28 de 36
al final de la estructura, no hay un orden predefinido. Asimismo no vamos a hacer borrados,
por lo que la ventaja de LinkedList, desaparece.
La opción B - HashMap no tiene sentido porque no tenemos key, sólo tenemos valores:
notas. Además, si nos inventáramos esa información (p.ej. PAC 1, etc.) guardaríamos más
información de la necesaria: notas y más información (p.ej. a qué se refiere), cuando sólo
queremos aplicar operaciones numéricas: media, mediana, moda, etc.
La opción C - TreeSet no nos permite guardar duplicados, entonces ¿y si tenemos dos notas
con el mismo valor, p.ej. 9? No podríamos guardar ese caso.
2. ¿Cuál de las siguientes instrucciones obtiene el texto que hay en una cadena de texto (i.e.
String) antes del primer símbolo '*', p.ej. "abc*de*ff" devolvería "abc"?
a. String abc = text.substring(0,text.firstChar("*")-1);
b. String abc = text.substring(1,text.indexOf("*"));
c. String abc = text.substring(0,text.indexOf("*"));
d. String abc = text.substring(0,text.indexOf("*")-1);
La opción B empieza en 1 y no en 0.
offices.stream()
Página 29 de 36
.filter(s -> s.startsWith("b"))
.map(String::toUpperCase)
.forEach(System.out::println);
C. El método filter se queda con los String que hay en offices que empiecen por “b”. Luego los
pasa a mayúsculas y después los imprime por pantalla.
Página 30 de 36
Parte 3 (30%) – Preguntas con respuesta abierta (hay que justificar la respuesta).
Considera el siguiente código para responder a TODAS las preguntas que se formulan en esta
parte de la prueba:
Página 31 de 36
public static void main(String[] args) {
System.out.println(pedro);
System.out.println(diego);
diego = (Chihuahua)pedro;
System.out.println(((Chihuahua)diego).bark());
Para cada pregunta escribe tu respuesta en el recuadro que verás a continuación de cada una
de ellas. Además, justifica brevemente tus respuestas.
La clase Chihuahua tiene sobrescrito el método toString de Object. El valor de size está
definido en el constructor por defecto como 10, que llama al constructor con dos argumentos.
La clase Dog no tiene sobreescrito el método toString (de Object) por lo que se
referencia).
Página 32 de 36
3. ¿Di qué ocurre con las líneas coloreadas en amarillo? Es decir, haz la traza de dicho código.
La variable diego apunta a un objeto de tipo Chihuahua, concretamente, al mismo objeto que
pedro. No sería necesario el casting en esta instrucción.
Gracias a que hacemos el casting en la última instrucción sí podemos invocar a bark que es
propio de Chihuahua. Si no hiciéramos el casting, diego tiene tipo estático Dog y no puede
invocar a métodos de Chihuahua. Así pues, por pantalla saldrá: arrrg!!!
SOBREESCRIBIR - SOBRECARGAR
En JAVA sobrecargar un método es permitir tener dos o más métodos con el mismo nombre
pero con diferentes tipos de parámetros u operaciones, es tarea del compilador saber usar
un método u el otro dependiendo del tipo de dato que se le esté pasando por parámetro.
Diremos que una subclase esta sobreescribiendo un método de su clase padre cuando esta
defina un método con las mismas características que el método de la superclase.
Para realizar la sobreescritura de métodos es importante saber ciertas reglas para poder
aplicarla de forma correcta:
1. El nivel de acceso del método sobreescrito no puede ser más restrictivo que el método
de la SuperClase, es decir, que el método de la clase padre sea protected y
el método de la clase hija sea private.
2. El tipo de retorno del método sobreescrito debe ser el mismo del método de la
SuperClase.
3. La firma del método sobreescrito debe ser idéntico al método de la SuperClase.
4. El nivel de acceso del método puede ser del mismo nivel o de un nivel menor que el
método de la SuperClase.
5. No se puede sobreescribir métodos marcados como final.
6. No se puede sobreescribir métodos marcados como static.
7. Los métodos que son declarados como private no pueden ser sobreescritos, ya que
estos no pueden ser heredados.
8. La sobreescritura de métodos puede lanzar excepciones de tipo runtime sin necesidad
de estar en la firma.
9. La sobreescritura de métodos no permite que la subclase lanze otro tipo
de excepción que no sea del mismo tipo de excepción que el de la Super Clase.
Página 33 de 36
Esta entrada al blog es una especie de pequeñas notas de resumen sobre el concepto de
las interfaces en java, son notas que desde mi punto de vista ayudan rápidamente a
recordar las interface
Las interfaces definen y estandarizan las formas en que pueden interactuar los
objetos entre sí.
Todos los métodos de una interfaz son public abstract de manera implícita y
todos sus atributos son implícitamente public static final.
Es una buena práctica de programación declarar los métodos de una interfaz sin
las palabras public y abstract, ya que son redundantes en las declaraciones de
los métodos de la interfaz. De manera similiar pasa con las constantes, estas
deben declararse sin las palabras clave public static final ya que también son
redundantes.
Para usar una interfaz una clase debe especificar que implementa (implements )
a esa interfaz y debe declarar cada uno de sus métodos con la firma especificada
en la declaración de la interfaz.
Una interfaz se utiliza en vez de una clase abstracta cuando no hay una
implementación predeterminada que heredar, esto es, no hay campos ni
implantaciones de métodos predeterminados
Página 34 de 36
Se puede crear una interfaz que describa la funcionabilidad deseada y después
implementar esta interfaz en cualquier clase que requiera esa funcionabilidad
Las interfaces permiten trabajar por contratos, establecen las pautas entre el
usuario de una clase y su implementación, ya que definen que métodos se
deben implementar y por el otro que métodos se pueden invocar
class _
getClass getClass Obtiene la clase de un objeto en tiempo de ejecución
()
int
hashCod
hashCod Devuelve el código hash asociado con el objeto invocado
e
e
boolean
equals equals(O Determina si un objeto es igual a otro
bject obj)
String
toString Devuelve una cadena que describe el objeto
toString()
void
wait wait(long Espera en otro hilo de ejecución
timeout)
Página 35 de 36
Método Sintaxis Propósito
nt nanos)
void
wait() Espera en otro hilo de ejecución
wait()
void
finalize Determina si un objeto es reciclado (obsoleto por JDK9)
finalize()
Página 36 de 36