Parcial de Java
Nombre:_______________________________________________________________________
DNI:_______________________Titulación: __________________________________________
1. Una aplicación se distribuye en dos ficheros JAR: 1) programa.jar, que contiene la clase programa.Principal que implementa el método main, y 2) libreria.jar. Indica cómo podríamos ejecutar la aplicación.
2. Supuesta una clase B que define 3 métodos públicos y que es subclase de otra clase A que declara 3 métodos públicos siendo uno de ellos final ¿cuántos métodos públicos están disponibles sobre los objetos de la clase B? Justifica la respuesta.
3. Escribe el código del método equals de una clase A que tiene dos atributos x e y de tipo entero de manera que dos objetos de tipo A son iguales si tienen los mismos valores de los atributos.
4. Dadas las clases Padre e Hijo contenidas en el mismo paquete Java ¿Cuál es el resultado de la ejecución del siguiente código? Justifica la respuesta.
public class Padre{
protected void metodo1() { System.out.println("P: M1");
}
public void metodo2() {
System.out.println("P: M2");
metodo1();
} }
public class Hijo extends Padre { public void metodo1() {
System.out.println("H: M1");
}
public static void main(
String args[]){
Padre p = new Hijo();
p.metodo2();
} }
5. Dadas las clases A, B y C definidas dentro del mismo paquete ¿Cuál sería el resultado del intento de compilación y ejecución del siguiente código? Justifica la respuesta
public class A { int at = 99;
}
public class B extends A{
int at = 100;
}
public class C extends B{
int at = 101;
public static void main (String[] args){
A oa = new C();
System.out.println(oa.at);
B ob = (B) oa;
System.out.println(ob.at);
} }
6. Indica si el siguiente enunciado es verdadero o falso, justificando la respuesta: "La aplicación de un método precedida de la palabra clave super siempre se resuelve por ligadura dinámica, ya que super referencia al objeto padre".
7. Dadas las clases A, B y C que están definidas dentro del mismo paquete ¿Cual será el resultado de la ejecución del siguiente código? Justifica la respuesta
class A{
protected boolean at;
public A(){
System.out.print(" A ");
} }
class B extends A{
public B(){
System.out.print(" B ");
}
public void met(B b){
b.at = true;
System.out.print(" " + (b.getClass() == getClass()));
System.out.print(" " + equals(b));
} }
class C extends B{
public static void main(String[] args){
B ob1 = new B();
ob1.at = true;
B ob2 = new C();
ob1.met(ob2);
System.out.print(" " + ob2.at);
} }
8. Supuestas las clases Punto2D y Punto3D definidas ambas en el mismo paquete. Indica los posibles errores del siguiente código. Justifica la respuesta.
public class Punto2D implements Cloneable{
private int x;
private int y;
public Punto2D(int x, int y){ this.x = x; this.y = y;}
public Punto2D clone() throws CloneNotSupportedException { return new Punto2D(this.x, this.y);
} }
public class Punto3D extends Punto2D{
private int z;
public Punto3D clone(){
return (Punto3D)super.clone();
} }
9. ¿Sería correcta la definición de las siguientes clases? Justifica la respuesta.
package p1;
public abstract class Padre{
private int at = 0;
abstract Padre met(String s);
}
package p1;
public class Hija extends Padre{
public Hija met(String s){
return new Hija();
}
public Padre met(){
return new Padre();
} }
10. Supuesto que todos los tipos están implementados dentro del mismo paquete Java
¿sería correcto el siguiente código? Justifica la respuesta indicando la manera de solucionar el problema, en el caso de que lo haya.
public interface IA{
IA met() throws Exception;
}
public class A implements IA {}
public abstract class B extends A{
B met() {
return this;
} }
11. Supuestas las clases A y Generica definidas ambas dentro del mismo paquete. Indica los posibles errores del siguiente código. Justifica la respuesta
class A {}
class Generica<T extends A> { void metodo(T t) {
T elemento1 = new T();
A elemento2 = t;
T elemento3 = new A();
} }
12. En JavaDoc, cuando documentamos un método ¿cómo podemos incluir una referencia a la documentación de otro método? Escribe un ejemplo suponiendo que el método que queremos referenciar se encuentra en la clase examen.A y se declara como double metodo(int a, Object b).
13. Escribe la declaración de la variable c en el método main de la clase Frutas para que el siguiente código compile con éxito. Justifica la respuesta.
1. import java.util.*;
2. public class Frutas {
3. public static void main(String [] args) { 4. // Declaración variable c
5. c = new TreeSet<Citrico>();
6. c = new HashSet<Naranja>();
7. } 8. }
9. class Citrico { }
10. class Naranja extends Citrico { }
14. Sobre las interfaces en Java, responde justificando las respuestas:
a. ¿Es posible que el tipo dinámico de una referencia sea una interfaz?
b. ¿Es posible que en una asignación el tipo estático de una parte de la asignación sea una interfaz y el de la otra parte una clase? Valora en esta pregunta tanto que la interfaz esté en la parte derecha como que esté en la parte izquierda de la asignación.
15. Supuesta la jerarquía de excepciones de la figura y supuesto que el método met1 lanza las excepciones Excepcion1, Excepcion2 y Excepcion3. ¿Sería correcta la implementación de met2? En el caso de que no lo sea arréglalo para que compile.
Justifica la respuesta.
public void met2() throws Excepcion1{
met1();
}
16. Sea Bsubclase de A, indica si el siguiente código es correcto. Justifica la respuesta.
void filtrar(List<A> lista) {
for (A elemento: lista) {
if (elemento instanceof B) lista.remove(elemento);
} }
17. Sobre las excepciones de Java:
a. ¿Qué excepción utilizamos para notificar la violación de una precondición de estado? ¿De qué tipo es esa excepción y por qué?
b. ¿Qué método aplicamos a una excepción para que muestre por pantalla la información del error y la pila de llamadas?
18. ¿Sería correcto el siguiente código? Justifica la respuesta.
public class A{
private final int at1 = 1;
private int at2;
private A(){}
public A (int at1){
this.at1 = at1;
}
public static void main (String[] args){
A[] tabla = new A[10];
for (int i = 0; i < 10 ; ++i){
tabla[i].at2 = i;
} } }
19. ¿Sería correcto el siguiente código? En el caso de que exista algún error de compilación indica la forma de solucionarlo. ¿Cuál sería el resultado de la ejecución?
Justifica las respuestas.
enum Valor{
VALOR1, VALOR2, VALOR3;
}
public class A{
public static void main (String[] args){
Valor[] tabla = new Valor[3];
tabla[0] = Valor.VALOR1 + 1;
for (Object obj : tabla) System.out.println(obj);
} }
20. Escribe el código de un método que tenga como parámetro una lista de cuentas (clase
Cuenta de teoría) y que devuelva un mapa que asocie códigos de cuentas con los objetos Cuenta. Nota: la clase Cuenta tiene disponible el método getCodigo() que devuelve un entero (int).