Title: Parte11
Course: 2025 - LISI - Programacion Orientada a Objetos 1-3

Q: La programación orientada a objetos permite crear nuevas clases a partir de clases existentes. Esto se denomina______________
- Encapsulación
- Herencia
- Abstracción
- Generalización
A: Herencia

Q: ¿Cuáles de las siguientes afirmaciones son verdaderas?
- Una subclase es un subconjunto de una superclase.
- Una subclase suele ampliarse para contener más funciones e información más detallada que su superclase.
- "class A extends B" significa que A es una subclase de B.
- "class A extends B" significa que B es una subclase de A.
A: Una subclase suele ampliarse para contener más funciones e información más detallada que su superclase.; "class A extends B" significa que A es una subclase de B.

Q: Herencia significa______________
- que los campos de datos deben declararse privados
- que una clase puede extender otra clase
- que una variable de supertipo puede referirse a un objeto de subtipo
- que una clase puede contener otra clase
A: que una clase puede extender otra clase

Q: Supongamos que creas una clase Cuadrado para que sea una subclase de ObjetoGeometrico. Analice el siguiente código:
[Image]
- El programa compila bien, pero no se puede crear una instancia de Cuadrado porque el constructor no especifica la longitud del Cuadrado.
- El programa tiene un error de compilación porque se intentó invocar el constructor de la clase ObjetoGeometrico ilegalmente.
- El programa compila bien, pero tiene un error en tiempo de ejecución debido a invocar el constructor de la clase Cuadrado ilegalmente.
A: El programa tiene un error de compilación porque se intentó invocar el constructor de la clase ObjetoGeometrico ilegalmente.

Q: Analice el siguiente código. Seleccione todo lo que corresponda.
[Image]
- El programa tiene un error de compilación porque A no tiene un constructor por defecto.
- El programa tiene un error de compilación porque el constructor por defecto de A invoca al constructor por defecto de B, pero B no tiene constructor por defecto.
- El programa compilaría bien si se añade el siguiente constructor en la clase A:```A(String cadena) { }```
- El programa se compilaría correctamente si se añade el siguiente constructor a la clase A:```A(String cadena) { super(cadena); }```
A: El programa tiene un error de compilación porque el constructor por defecto de A invoca al constructor por defecto de B, pero B no tiene constructor por defecto.; El programa se compilaría correctamente si se añade el siguiente constructor a la clase A:```A(String cadena) { super(cadena); }```

Q: Analice el siguiente código. Seleccione todo lo que corresponda.
[Image]
- El programa no compila porque Prueba no tiene un constructor por defecto Prueba().
- El programa tiene un constructor implícito por defecto Prueba(), pero no se puede compilar, porque su superclase no tiene un constructor por defecto. El programa se compilaría si se eliminara el constructor de la clase A.
- El programa se compilaría si se añade explícitamente un constructor por defecto A(){ } a la clase A.
- El programa compila, pero tiene un error de ejecución debido al conflicto en el nombre del método imprimir.
A: El programa tiene un constructor implícito por defecto Prueba(), pero no se puede compilar, porque su superclase no tiene un constructor por defecto. El programa se compilaría si se eliminara el constructor de la clase A.; El programa se compilaría si se añade explícitamente un constructor por defecto A(){ } a la clase A.

Q: Analice el siguiente código. ¿Cuál es la salida de la clase C?
[Image]
- No se muestra nada
- "Constructor por defecto de B"
- "Constructor por defecto de A" seguido de "Constructor por defecto de B"
- "Constructor por defecto de B" seguido de "Constructor por defecto de A"
- "Constructor por defecto de A"
A: "Constructor por defecto de A" seguido de "Constructor por defecto de B"

Q: ¿Cuál de las siguientes afirmaciones es incorrecta?
- Un constructor puede ser estático.
- Un constructor puede ser privado.
- Un constructor puede invocar un método estático.
- Un constructor puede invocar un constructor sobrecargado.
- Un constructor invoca por defecto al constructor sin argumentos de su superclase si un constructor no invoca un constructor sobrecargado o el constructor de su superclase.
A: Un constructor puede ser estático.

Q: ¿Cuál de las afirmaciones relativas a la palabra clave 'super' es incorrecta?
- Se puede usar super para invocar un constructor de superclase.
- Se puede usar super para invocar un metodo de superclase.
- Se puede usar super.super.p para invocar un metodo en la clase padre de la superclase.
- No se puede invocar un metodo en la clase padre de superclase.
A: Se puede usar super.super.p para invocar un metodo en la clase padre de la superclase.

Q: Analice el siguiente código. Seleccione la respuesta correcta.
[Image]
- El programa tiene un error de compilación, porque m se sobrescribe con una firma diferente en B.
- El programa tiene un error de compilación, porque b.m(5) no puede ser invocado ya que el método m(int) está oculto en B.
- El programa tiene un error de ejecución en b.i, porque i no es accesible desde b.
- El método m no está sobrecargado en B. B hereda el método m de A y define un método sobrecargado m en B.
A: El método m no está sobrecargado en B. B hereda el método m de A y define un método sobrecargado m en B.

Q: Analice el siguiente código. El método getValor() está sobreescrito de dos maneras. ¿Cuál es la correcta?
[Image]
- Forma 1
- Forma 2
- Forma 1 y Forma 2
- Ninguna
A: Forma 2

Q: ¿Cuál de las siguientes afirmaciones es cierta? Seleccione todas las que correspondan.
- Para sobrescribir un método, éste debe definirse en la subclase utilizando la misma firma y tipo de retorno compatible que en su superclase.
- Sobrecargar un método es proporcionar más de un método con el mismo nombre pero con firmas diferentes para distinguirlos.
- Es un error de compilación si dos métodos difieren sólo en el tipo de retorno en la misma clase.
- Un método privado no puede ser sobreescrito. Si un método definido en una subclase es privado en su superclase, los dos métodos no tienen nada que ver.
- Un método estático no puede ser sobreescrito. Si un método estático definido en la superclase se redefine en una subclase, el método definido en la superclase es ignorado.
A: Para sobrescribir un método, éste debe definirse en la subclase utilizando la misma firma y tipo de retorno compatible que en su superclase.; Sobrecargar un método es proporcionar más de un método con el mismo nombre pero con firmas diferentes para distinguirlos.; Es un error de compilación si dos métodos difieren sólo en el tipo de retorno en la misma clase.; Un método privado no puede ser sobreescrito. Si un método definido en una subclase es privado en su superclase, los dos métodos no tienen nada que ver.; Un método estático no puede ser sobreescrito. Si un método estático definido en la superclase se redefine en una subclase, el método definido en la superclase es ignorado.

Q: Analice el siguiente código. ¿Cuál es el comportamiento del programa al ejecutarlo?
[Image]
- No se llama al constructor de la clase A.
- El constructor de la clase A es llamado y muestra "El valor de i de la clase A es 7".
- El constructor de la clase A es llamado y muestra "El valor de i de la clase A es 40".
- Se llama al constructor de la clase A y muestra "El valor de i de la clase A es 60".
A: El constructor de la clase A es llamado y muestra "El valor de i de la clase A es 7".

Q: Analice el siguiente código. ¿Cuál es el comportamiento del programa al ejecutarlo?
[Image]
- No se llama al constructor de la clase A.
- El constructor de la clase A es llamado y muestra "El valor de i de la clase A es 7".
- El constructor de la clase A es llamado y muestra "El valor de i de la clase A es 40".
- Se llama al constructor de la clase A y muestra "El valor de i de la clase A es 60".
A: Se llama al constructor de la clase A y muestra "El valor de i de la clase A es 60".

Q: ¿Cuáles de las siguientes afirmaciones son correctas? Seleccione todas las que apliquen.
- Un método puede ser sobrecargado en la misma clase.
- Un método puede ser sobrecargado en la misma clase.
- Si un método sobrecarga otro método, estos dos métodos deben tener la misma firma.
- Si un método sobrecarga otro método, estos dos métodos deben tener la misma firma.
- Un método de una subclase puede sobrecargar un método de la superclase.
A: Un método puede ser sobrecargado en la misma clase.; Si un método sobrecarga otro método, estos dos métodos deben tener la misma firma.; Un método de una subclase puede sobrecargar un método de la superclase.

Q: Analice el siguiente código. Seleccione todo lo que corresponda.
[Image]
- El programa no se puede compilar, porque```System.out.println(a1)```es incorrecto y debería sustituirse por```System.out.println(a1.toString());```
- Al ejecutar```System.out.println(a1)```, se invoca al método```toString()```de la clase```Object```
- Cuando se ejecuta```System.out.println(a2)```, se invoca al método ```toString()```de la clase ```Object```
- Cuando se ejecuta```System.out.println(a1)```, el método ```toString()```en la clase A es invocado.
A: Cuando se ejecuta```System.out.println(a2)```, se invoca al método ```toString()```de la clase ```Object```; Cuando se ejecuta```System.out.println(a1)```, el método ```toString()```en la clase A es invocado.

Q: Dado el siguiente código, encuentre que sentencia provoca un error de compilación. Seleccione todas las que apliquen.
[Image]
- ```m(new EstudianteDePosgrado())```provoca un error
- ```m(new Estudiante())```provoca un error
- ```m(new Persona())```provoca un error
- ```m(new Object())```provoca un error
A: ```m(new Persona())```provoca un error; ```m(new Object())```provoca un error

Q: Polimorfismo significa______________
- que los campos de datos deben declararse privados
- que una clase puede extender otra clase
- que una variable de supertipo puede referirse a un objeto de subtipo
- que una clase puede contener otra clase
A: que una variable de supertipo puede referirse a un objeto de subtipo

Q: Analice el siguiente código. ¿Cuál es la salida al ejecutar el programa?
[Image]
- Persona Persona
- Persona Estudiante
- Estudiante Estudiante
- Estudiante Persona
A: Persona Estudiante

Q: Analice el siguiente código. ¿Cuál es la salida al ejecutar el programa?
[Image]
- Persona Persona
- Persona Estudiante
- Estudiante Estudiante
- Estudiante Persona
A: Persona Persona

Q: ¿Cuál de las afirmaciones es incorrecta?
- Siempre se puede pasar una instancia de una subclase a un parámetro del tipo de su superclase. Esta característica se conoce como polimorfismo.
- El compilador encuentra un método coincidente según el tipo de parámetro, el número de parámetros y el orden de los parámetros en tiempo de compilación.
- Un método puede implementarse en varias subclases. La máquina virtual Java vincula dinámicamente la implementación del método en tiempo de ejecución.
- La vinculación dinámica puede aplicarse a métodos estáticos.
- La vinculacion dinamica puede aplicarse a metodos de instancia.
A: La vinculación dinámica puede aplicarse a métodos estáticos.

Q: ¿Cuál de las siguientes es una palabra reservada de Java?
- instanceOf
- instanceof
- cast
- casting
A: instanceof

Q: Analice el siguiente código. ¿Cuál es el comportamiento del programa?
[Image]
- Al asignar s a o en ```Objeto o = s```, se crea un nuevo objeto.
- Al moldear o en ```String d = (String)o```, se crea un nuevo objeto.
- Al moldear o en ```String d = (String)o```, se cambia el contenido de o.
- s, o y d hacen referencia al mismo objeto String.
A: s, o y d hacen referencia al mismo objeto String.

Q: Supongamos que Cilindro es una subclase de Círculo. Analice el siguiente código:
[Image]
- El código tiene un error de compilación
- El código tiene un error de tiempo de ejecución
- El código está bien
A: El código tiene un error de compilación

Q: Dados las siguientes clases y sus objetos
[Image]

Analice la siguiente sentencia:
[Image]
- clase3 es moldeada a clase2 correctamente.
- Se obtendrá un error de ejecución porque no se pueden moldear objetos de clases hermanas.
- Obtendrá un error de ejecución porque el sistema de ejecución de Java no puede realizar múltiples moldeados de forma anidada.
- La sentencia está correcta.
A: Se obtendrá un error de ejecución porque no se pueden moldear objetos de clases hermanas.

Q: Dado el siguiente código, ¿Cuál de las instrucciones da como resultado false?
[Image]
- ```clase1 instanceof Clase1```
- ```clase2 instanceof Clase1```
- ```clase3 instanceof Clase1```
- ```clase4 instanceof Clase2```
A: ```clase4 instanceof Clase2```

Q: Se puede asignar _________ a una variable de tipo Object[]. Seleccione todo lo que corresponda.
- ```new char[100]```
- ```new int[100]```
- ```new double[100]```
- ```new String[100]```
- ```new java.util.Date[100]```
A: ```new String[100]```; ```new java.util.Date[100]```

Q: Supongamos que Cilindro es una subclase de Círculo. Analice el siguiente código:
[Image]
- El código tiene un error de compilación
- El código tiene un error de tiempo de ejecución
- El código está bien
A: El código está bien

Q: Analice el siguiente código. ¿Cuál es la salida al ejecutar cada programa?
[Image]
- El programa 1 y el programa 2 imprimen true
- El programa 1 imprime false y el programa 2 imprime true
- El programa 1 imprime true y el programa 2 imprime false
- El programa 1 y el programa 2 imprimen false
A: El programa 1 imprime true y el programa 2 imprime false

Q: Analice el siguiente código. ¿Cuál es la salida al ejecutar cada programa?
[Image]
- El programa 1 y el programa 2 imprimen true
- El programa 1 imprime false y el programa 2 imprime true
- El programa 1 imprime true y el programa 2 imprime false
- El programa 1 y el programa 2 imprimen false
A: El programa 1 imprime false y el programa 2 imprime true

Q: Analice el siguiente código. ¿Cuál es la salida al ejecutar cada programa?
[Image]
- El programa 1 y el programa 2 imprimen true
- El programa 1 imprime false y el programa 2 imprime true
- El programa 1 imprime true y el programa 2 imprime false
- El programa 1 y el programa 2 imprimen false
A: El programa 1 y el programa 2 imprimen true

Q: El método equals está definido en la clase Object. ¿Cuál de las siguientes opciones es correcta para sobrescribirlo en la clase String?
- ```public boolean equals(String str)```
- ```public boolean equals(Object obj)```
- ```public static boolean equals(String str)```
- ```public static boolean equals(Object obj)```
A: ```public boolean equals(Object obj)```

Q: ¿Cuál de las siguientes afirmaciones es cierta? Seleccione todas las que apliquen.
- Sobreescriba el método equals(Object) en la clase Object siempre que sea posible.
- Sobreescriba el método toString() en la clase Object siempre que sea posible.
- Un constructor público sin argumentos es asignado por defecto si no hay constructores definidos explícitamente.
- Usted debe seguir el estilo estándar de programación Java y las convenciones de nomenclatura. Elija nombres informativos para clases, campos de datos y métodos.
A: Sobreescriba el método equals(Object) en la clase Object siempre que sea posible.; Sobreescriba el método toString() en la clase Object siempre que sea posible.; Un constructor público sin argumentos es asignado por defecto si no hay constructores definidos explícitamente.; Usted debe seguir el estilo estándar de programación Java y las convenciones de nomenclatura. Elija nombres informativos para clases, campos de datos y métodos.

Q: ¿Cuál es la salida del siguiente código?
[Image]
- false false
- true true
- false true
- true false
A: false false

Q: ¿Cuál es la salida del siguiente código?
[Image]
- false false
- true true
- false true
- true false
A: false true

Q: Dadas dos variables de referencia a1 y a2, si a1 == a2 es true, a1.equals(a2) debe ser ___________.
- true
- false
A: true

Q: Dadas dos variables de referencia a1 y a2, si a1.equals(a2) es true, a1 == a2 ___________.
- siempre es true
- siempre es false
- puede ser true o false
A: puede ser true o false

Q: Analice el siguiente código. Seleccione todo lo que aplique.
[Image]
- La última línea del código provoca un error de ejecución porque no hay ningún elemento en el índice 3 de la lista de arreglos.
- La última línea del código tiene un error de compilación porque no hay ningún elemento en el índice 3 de la lista de arreglos.
- Si reemplaza la última línea por ```lista.add(3, "Cosala")```, el código se compilará y ejecutará correctamente.
- Si reemplaza la última línea por ```lista.add(4, "Cosala")```, el código se compilará y ejecutará correctamente.
A: La última línea del código provoca un error de ejecución porque no hay ningún elemento en el índice 3 de la lista de arreglos.; Si reemplaza la última línea por ```lista.add(3, "Cosala")```, el código se compilará y ejecutará correctamente.

Q: ¿Cuál es la salida del siguiente código?
[Image]
- true false
- false true
- true true
- false false
A: true true

Q: ¿Cuál es la salida del siguiente código?
[Image]
- true false
- false true
- true true
- false false
A: false true

Q: Puede crear una ArrayList utilizando _________.
- ```new ArrayList[]```
- ```new ArrayList[100]```
- ```new ArrayList<>()```
- ```ArrayList()```
A: ```new ArrayList<>()```

Q: Al invocar _________ se eliminan todos los elementos de un ArrayList a.
- ```a.remove()```
- ```a.clean()```
- ```a.delete()```
- ```a.empty()```
- ```a.clear()```
A: ```a.clear()```

Q: Suponga que un ArrayList a contiene dos cadenas [Uno, Tres]. ¿Cuál de los siguientes métodos hará que la lista se convierta en [Uno, Dos, Tres]?
- ```a.add("Dos")```
- ```a.add(0, "Dos")```
- ```a.add(1, "Dos")```
- ```a.add(2, "Dos")```
A: ```a.add(1, "Dos")```

Q: Suponga que un ArrayList a contiene dos cadenas [Uno, Tres]. ¿Cuáles de las siguientes sentencias hará que la lista se convierta en [Uno]?
- ```a.remove("Tres")```
- ```a.remove(0)```
- ```a.remove(1)```
- ```a.remove(2)```
A: ```a.remove("Tres")```; ```a.remove(1)```

Q: Suponga que un ArrayList a contiene dos cadenas [Uno, Tres]. ¿Cuáles de las siguientes sentencias provocarán errores en tiempo de ejecución?
- ```a.get(1)```
- ```a.set(2, "Cuatro")```
- ```a.get(2)```
- ```a.remove(2)```
- ```a.size()```
A: ```a.set(2, "Cuatro")```; ```a.get(2)```; ```a.remove(2)```

Q: La invocación de _________ devuelve el primer elemento de un ArrayList a.
- ```a.first()```
- ```a.get(0)```
- ```a.get(1)```
- ```a.get()```
A: ```a.get(0)```

Q: La invocación de _________ devuelve el número de los elementos de un ArrayList a.
- ```a.getSize()```
- ```a.getLength(0)```
- ```a.length(1)```
- ```a.size()```
A: ```a.size()```

Q: Supongamos que una ArrayList lista contiene {"rojo", "verde", "rojo", "verde"}. ¿Cómo es la lista después de la instrucción lista.remove("rojo")?
- {"rojo", "verde", "rojo", "verde"}
- {"verde", "rojo", "verde"}
- {"verde", "verde"}
- {"rojo", "verde", "verde"}
A: {"verde", "rojo", "verde"}

Q: Supongamos que una ArrayList lista contiene {"rojo", "rojo", "verde"}. ¿Cómo es la lista después del siguiente código?
[Image]
- {"rojo", "rojo", "verde"}
- {"rojo", "verde"}
- {"verde"}
- {}
A: {"rojo", "verde"}

Q: Supongamos que una ArrayList lista contiene {"rojo", "rojo", "verde"}. ¿Cómo es la lista después del siguiente código?
[Image]
- {"rojo", "rojo", "verde"}
- {"rojo", "verde"}
- {"verde"}
- {}
A: {"verde"}

Q: La salida del siguiente código es______________
[Image]
- [Uno]
- [Uno, Dos]
- [Uno, Dos, Tres]
- [Uno, Tres]
A: [Uno, Dos, Tres]

Q: La salida del siguiente código es______________
[Image]
- [rojo, verde, azul, rojo]
- [rojo, verde, azul]
- [rojo, rojo, verde, azul]
- [rojo, verde, rojo, azul]
A: [rojo, rojo, verde, azul]

Q: Analice el siguiente código
[Image]
- El código es correcto y muestra [1, 2, 3].
- El código es correcto y muestra [1.0, 2.0, 3.0].
- El código tiene un error de compilación porque un entero como 1 se convierte automáticamente en un objeto Integer, pero el tipo de elemento del array es Double.
- El código tiene un error de compilación porque el método asList(arreglo) requiere que los elementos del arreglo sean objetos.
A: El código tiene un error de compilación porque un entero como 1 se convierte automáticamente en un objeto Integer, pero el tipo de elemento del array es Double.

Q: Analice el siguiente código
[Image]
- El código es correcto y muestra [1, 2, 3].
- El código es correcto y muestra [1.0, 2.0, 3.0].
- El código tiene un error de compilación porque un entero como 1 se convierte automáticamente en un objeto Integer, pero el tipo de elemento del array es Double.
- El código tiene un error de compilación porque el método asList(arreglo) requiere que los elementos del arreglo sean objetos.
A: El código tiene un error de compilación porque el método asList(arreglo) requiere que los elementos del arreglo sean objetos.

Q: Analice el siguiente código
[Image]
- El código es correcto y muestra 3.
- El código es correcto y muestra 3.0.
- El código tiene un error de compilación en Collections.max(c), ya que c no puede ser un arreglo.
- El código tiene un error de compilación en double[] c = {1, 2, 3}.
A: El código tiene un error de compilación en Collections.max(c), ya que c no puede ser un arreglo.

Q: Analice el siguiente código
[Image]
- El código es correcto y muestra [3, 5].
- El código es correcto y muestra [5, 3].
- El código tiene un error de compilación en Collections.shuffle(c), ya que c no puede ser un arreglo.
- El código tiene un error de compilación en Integer[] c = {3, 5}.
A: El código tiene un error de compilación en Collections.shuffle(c), ya que c no puede ser un arreglo.

Q: El diseño de una clase requiere que una determinada variable miembro sea accesible por cualquier subclase de esta clase, pero no por clases que no sean miembros del mismo paquete. ¿Qué debe hacerse para conseguirlo?
- La variable debe ser declarada como pública.
- La variable debe ser declarada como privada
- La variable debe ser declarada como protegida.
- La variable no debe tener un modificador de acceso especial.
- La variable debe ser declarada como privada y se debe proporcionar un método de acceso.
A: La variable debe ser declarada como protegida.

Q: ¿Cuál sentencia es la correcta con respecto al código?
[Image]
- Un objeto de B contiene los campos de datos a, b, c, d.
- Un objeto de B contiene los campos de datos b, c, d.
- Un objeto de B contiene los campos de datos b, d.
- Un objeto de B contiene los campos de datos c, d.
A: Un objeto de B contiene los campos de datos a, b, c, d.

Q: ¿Cuál sentencia es la correcta con respecto al código?
[Image]
- En la clase B, un método de instancia sólo puede acceder a los campos a, b, c, d.
- En la clase B, un método de instancia sólo puede acceder a los campos b, c, d.
- En la clase B, un método de instancia sólo puede acceder a los campos b, d.
- En la clase B, un método de instancia sólo puede acceder a los campos c, d.
A: En la clase B, un método de instancia sólo puede acceder a los campos b, c, d.

Q: ¿Cuál de las siguientes sentencias es falsa?
- Una clase pública puede ser accedida por una clase de un paquete diferente.
- Un método privado no puede ser accedido por una clase de un paquete diferente.
- Un método protegido puede ser accedido por una subclase en un paquete diferente.
- Un método sin modificador de visibilidad puede ser accedido por una clase en un paquete diferente.
A: Un método sin modificador de visibilidad puede ser accedido por una clase en un paquete diferente.

Q: ¿Qué modificador debe utilizar en una clase para que una clase del mismo paquete pueda acceder a ella, pero una clase (incluida una subclase) de un paquete diferente no pueda acceder a ella?
- ```public```
- ```private```
- ```protected```
- ```default```
A: ```default```

Q: ¿Qué modificador debe utilizar en los miembros de una clase para que no sean accesibles a otra clase de un paquete diferente, pero sí a cualquier subclase de cualquier paquete?
- ```public```
- ```private```
- ```protected```
- ```default```
A: ```protected```

Q: La visibilidad de estos modificadores aumenta en este orden:
- private, protected, ninguno(default), and public.
- private, ninguno(default), protected, and public.
- ninguno(default), private, protected, and public.
- ninguno(default), protected, private, and public.
A: private, ninguno(default), protected, and public.

Q: ¿De cuál de las siguientes clases no se puede aplicar herencia?
- ```class X{}```
- ```class X{ private X(){ }}```
- ```final class X{}```
- ```class X{ protected X(){ }}```
A: ```final class X{}```