Teoría sobre JAVA
Maverik90Trabajo16 de Enero de 2020
3.336 Palabras (14 Páginas)187 Visitas
Trabajo práctico - Conceptos del lenguaje Java
Constructores 2
Modificadores de visibilidad 4
Colecciones 5
Excepciones 6
Static 6
Final 7
Clases abstractas 9
Interfaces 9
Clases abstractas e interfaces 9
Herencia 10
Polimorfismo 10
Constructores
Ejercicios
1. ¿Qué salida produce este código? Justifique su respuesta.
public class PruebasConstructores {
public static void main(String [] args) {
System.out.println("Pruebas 1");
Clase3 o = new Clase3();
Clase2 o2 = new Clase3();
}
}
class Clase1 {
public Clase1() { System.out.print(1); }
}
class Clase2 extends Clase1 {
public Clase2() { System.out.print(2); }
}
class Clase3 extends Clase2 {
public Clase3() { System.out.println(3); }
}
Salida del código: Pruebas 1
123
123
Al instanciar los objetos como de Clase3, el constructor de esta clase extiende de la Clase2. Por lo tanto, antes de armar su objeto, arma el de la clase que hereda. Así mismo, la Clase2 extiende de la Clase1, por lo que para construir su objeto debe llamar primero al constructor de la Clase1. De esta manera, primero imprime el 1, después el 2 y por último el 3.
2. ¿Qué salida produce este código? Justifique su respuesta.
public class PruebasConstructores2 {
public static void main(String [ ] args) {
System.out.println("Pruebas 2");
ClaseC o = new ClaseC(1);
ClaseB o2 = new ClaseC(1);
ClaseB o2 = new ClaseC();
ClaseA o3 = new ClaseA();
}
}
class ClaseA {
private ClaseA() { System.out.print(10); }
}
class ClaseB extends ClaseA {
public ClaseB() { System.out.print (20); }
}
class ClaseC extends ClaseB {
public ClaseC(int A) { System.out.print (30); }
}
Si bien la clase “ClaseB” hereda de “ClaseA”, no puede generar el constructor porque el constructor de “ClaseA” es privado. Es decir, que solo puede ser accedido por elementos de la misma clase. La solución a este problema es cambiar la visibilidad del constructor de A, de private a public.
Pero, aun arreglando el problema anterior, en el main falla la siguiente instanciación ClaseB o2 = new ClaseC(). Esto es porque la clase “ClaseC” solo tiene definido un constructor parametrizado. La solución sería mandarle el parámetro correspondiente, quedando:
ClaseB o2 = new ClaseC(10);
Ejercicios, parte 2
- ¿Cuál será la salida por consola cuando el siguiente código java sea compilado y ejecutado? Justifique su respuesta.
public class C1 {
public C1() { System.out.print(1); }
}
public class C2 extends C1 {
public C2() { System.out.print(2); }
}
public class C3 extends C2 {
public C3() { System.out.print(3); }
}
public class Ctest {
public static void main (String [] a) {
C3 c = new C3();
}
}
a) 3
b) 23
c) 32
d) 123
e) 321
f) Falla la compilación
g) Se lanza una excepción en tiempo de ejecución
Cuestionario
- En el constructor ¿En qué casos necesario invocar explícitamente al constructor de la clase base?
- ¿En toda clase es necesario definir un constructor?
- ¿Una clase abstracta debe tener constructor?
- ¿Una interfaz puede tener constructor?
- En una jerarquía de clases ¿En que orden se ejecutan los constructores?
- ¿Qué ocurre si olvidamos poner super como primera línea de la subclase?
- Los constructores no se heredan entre jerarquías de clases. Verdadero o Falso. Justifique
Modificadores de visibilidad
Complete la siguiente tabla con el comportamiento de los modificadores de visibilidad en los atributos de una clase:
...