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

Q: ¿Cuál de las siguientes definiciones de clase define una clase abstracta correcta?
- class A { abstract void metodo() { } }
- class A { abstract void metodo(); }
- abstract class A { abstract void metodo(); }
- public class abstract A { abstract void metodo(); }
A: abstract class A { abstract void metodo(); }

Q: ¿Cuál de las siguientes opciones declara un método abstracto en una clase abstracta de Java?
- public abstract metodo();
- public abstract void metodo();
- public void abstract metodo();
- public void metodo() {}
- public abstract void metodo() {}
A: public abstract void metodo();

Q: ¿Cuál de las siguientes afirmaciones sobre los métodos abstractos es falsa?
- Una clase abstracta puede tener instancias creadas usando el constructor de la clase abstracta.
- Una clase abstracta puede ser extendida.
- Una subclase de una superclase no abstracta puede ser abstracta.
- Una subclase puede sobrescribir un método concreto de una superclase para declararlo abstracto.
- Una clase abstracta puede usarse como un tipo de dato.
A: Una clase abstracta puede tener instancias creadas usando el constructor de la clase abstracta.

Q: ¿Cuál de las siguientes afirmaciones sobre los métodos abstractos es falsa?
- Las clases abstractas tienen constructores.
- Una clase que contiene métodos abstractos debe ser abstracta.
- Es posible definir una clase abstracta que no contenga métodos abstractos.
- Un método abstracto no puede estar contenido en una clase no abstracta.
- Un campo de datos puede declararse abstracto.
A: Un campo de datos puede declararse abstracto.

Q: Supongamos que A es una clase abstracta, B es una subclase concreta de A, y tanto A como B tienen un constructor sin argumentos. ¿Cuál de las siguientes opciones es correcta?
- ```A a = new A();```
- ```A a = new B();```
- ```B b = new A();```
- ```B b = new B();```
A: ```A a = new B();```; ```B b = new B();```

Q: ¿Cuál es la salida de la clase Prueba?
[Image]
- ABCD
- BACD
- CBAE
- AEDC
- BEDC
A: BEDC

Q: Analice las siguentes sentencias de código:
```
Number numeroEntero = new Integer(0);
Double numeroDecimal = (Double)numeroEntero; Elija la respuesta correcta:
```
- No existe la clase Integer. Debes usar la clase Int.
- El compilador detecta que numeroEntero no es una instancia de Double.
- Se produce una excepción de casting de clase en tiempo de ejecución, ya que Integer no puede moldearse a Double.
- El programa se ejecuta correctamente, ya que Integer es una subclase de Double.
- Puedes convertir un int a double, así que puedes convertir una instancia Integer a una instancia Double.
A: Se produce una excepción de casting de clase en tiempo de ejecución, ya que Integer no puede moldearse a Double.

Q: Analice las siguentes sentencias de código:
```
Number[] arreglo = new Integer[2];
arreglo[0] = Double.valueOf(1.5);
```
Elija la respuesta correcta:
- No se puede utilizar Number como tipo de datos ya que es una clase abstracta.
- Como cada elemento de arreglo es de tipo Number, no se le puede asignar un objeto Integer.
- Como cada elemento de arreglo es de tipo Number, no se le puede asignar un objeto Double.
- En tiempo de ejecución, un nuevo Integer[2] es asignado a arreglo. Esto hace que cada elemento de arreglo sea un objeto Integer. Por tanto, no puedes asignarle un objeto Double.
A: En tiempo de ejecución, un nuevo Integer[2] es asignado a arreglo. Esto hace que cada elemento de arreglo sea un objeto Integer. Por tanto, no puedes asignarle un objeto Double.

Q: Analizando el siguiente código, ¿Cuál de las siguientes afirmaciones es correcta?
[Image]
- El programa tiene un error de compilación porque no se puede asignar una instancia Integer a una variable Number.
- El programa tiene un error de compilación porque intValue es un método abstracto en Number.
- El programa tiene un error de compilación porque x no tiene el método compareTo.
- El programa compila y corre bien.
A: El programa tiene un error de compilación porque x no tiene el método compareTo.

Q: ¿Cuál de las siguentes sentencias es incorrecta?
- ```Integer i = 4.5;```
- ```Double i = 4.5;```
- ```Object i = 4.5;```
- ```Number i = 4.5;```
A: ```Integer i = 4.5;``` / ```Number i = 4.5;```

Q: Analizando el siguiente código, ¿Cuál de las siguientes afirmaciones es correcta?
[Image]
- El programa tiene un error de compilación porque no se puede asignar una instancia Integer a una variable Number.
- El programa tiene un error de compilación porque intValue es un método abstracto en Number.
- El programa tiene un error de compilación porque x no puede ser convertido a Integer.
- El programa tiene un error de compilación porque el operador de acceso a miembro (.) es ejecutado antes que el operador de casting.
- El programa compila y corre bien.
A: El programa tiene un error de compilación porque el operador de acceso a miembro (.) es ejecutado antes que el operador de casting.

Q: Analice el siguiente código. ¿Cuál de las siguientes afirmaciones es correcta?
[Image]
- El programa tiene un error de compilación en la línea 6 porque java.util.Calendar es una clase abstracta.
- El programa tiene un error de compilación en la línea 7 porque java.util.Calendar es una clase abstracta.
- El programa tiene un error de compilación en la línea 8 porque Calendario[1] no es de tipo GregorianCalendar.
- El programa no tiene errores de compilación.
A: El programa tiene un error de compilación en la línea 7 porque java.util.Calendar es una clase abstracta.

Q: Considere un objeto Calendar calendario = new GregorianCalendar(). ¿Cuál método retorna el mes del año?
- calendario.get(Calendar.MONTH)
- calendario.get(Calendar.MONTH_OF_YEAR)
- calendario.get(Calendar.WEEK_OF_MONTH)
- calendario.get(Calendar.WEEK_OF_YEAR)
A: calendario.get(Calendar.MONTH)

Q: Considere un objeto Calendar calendario = new GregorianCalendar(). ¿Cuál método retorna la semana del año?
- calendario.get(Calendar.MONTH)
- calendario.get(Calendar.MONTH_OF_YEAR)
- calendario.get(Calendar.WEEK_OF_MONTH)
- calendario.get(Calendar.WEEK_OF_YEAR)
A: calendario.get(Calendar.WEEK_OF_YEAR)

Q: Considere un objeto Calendar calendario = new GregorianCalendar(). ¿Cuál método retorna el numero de días en un mes?
- calendario.get(Calendar.MONTH)
- calendario.get(Calendar.MONTH_OF_YEAR)
- calendario.get(Calendar.WEEK_OF_MONTH)
- calendario.get(Calendar.WEEK_OF_YEAR)
- calendario.getActualMaximum(Calendar.DAY_OF_MONTH)
A: calendario.getActualMaximum(Calendar.DAY_OF_MONTH)

Q: ¿Cuál de las siguientes declaraciones es la correcta para definir a una interfaz?
- interface A { void imprimir() { }; }
- abstract interface A { imprimir(); }
- abstract interface A { abstract void imprimir() { };}
- interface A { void imprimir();}
A: interface A { void imprimir();}

Q: ¿Cuáles de las siguientes sentencias son incorrectas?
- Una clase abstracta contiene constructores.
- Los constructores de una clase abstracta deben estar protegidos.
- Los constructores en una clase abstracta son privados.
- Puedes declarar una clase abstracta final.
- Una interfaz puede contener constructores.
A: Los constructores en una clase abstracta son privados.; Puedes declarar una clase abstracta final.; Una interfaz puede contener constructores.

Q: ¿Cuál de las siguentes sentencias no es un tipo de referencia?
- Una clase
- Una interfaz
- Un arreglo (array)
- Un tipo de dato primitivo
A: Un tipo de dato primitivo

Q: ¿Cuál es el resultado de ejecutar el siguiente programa?
[Image]
- Nada
- "b es una instancia de A"
- "b es una instancia de C"
- "b es una instancia de A", seguido de "b es una instancia de C"
A: "b es una instancia de A", seguido de "b es una instancia de C"

Q: Suponga que A es una interfaz, B es una clase concreta con un constructor sin argumentos que implementa a A. ¿Cuáles de las siguentes afirmaciones son correctas?
- ```A a = new A();```
- ```A a = new B();```
- ```B b = new A();```
- ```B b = new B();```
A: ```A a = new B();```; ```B b = new B();```

Q: Analice el siguiente programa. ¿Cuáles afirmaciones son las correctas?
[Image]
- El programa tiene un error de compilación porque Prueba no tiene un método main.
- El programa tiene un error de compilación porque obj1 es una instancia de Object y no tiene el método compareTo.
- El programa tiene un error de compilación porque no se puede convertir una instancia de Object obj1 en Comparable.
- El programa compilará si ((Comparable)obj1.compareTo(obj2) >= 0) es reemplazado por (((Comparable)obj1).compareTo(obj2) >= 0).
A: El programa tiene un error de compilación porque obj1 es una instancia de Object y no tiene el método compareTo.; El programa compilará si ((Comparable)obj1.compareTo(obj2) >= 0) es reemplazado por (((Comparable)obj1).compareTo(obj2) >= 0).

Q: ¿Cuáles afirmaciones son las correctas?
- La clase String implementa la interfaz Comparable
- La clase Date implementa la interfaz Comparable
- La clase Double implementa la interfaz Comparable
- La clase BigInteger implementa la interfaz Comparable
A: La clase String implementa la interfaz Comparable; La clase Date implementa la interfaz Comparable; La clase Double implementa la interfaz Comparable; La clase BigInteger implementa la interfaz Comparable

Q: Analice el siguiente programa. ¿Cuál es el resultado al ejecutarlo? [Image]

[Image]
- El programa tiene un error de compilación porque la clase Fruta no tiene un constructor sin argumentos.
- El programa tiene un error de ejecución en la línea 3 porque la clase Fruta no tiene un constructor sin argumentos.
- El programa tiene un error de compilación en la línea 4 porque la clase Fruta no implementa la interfaz java.lang.Comparable y los objetos Fruta no son comparables.
- El programa tiene un error de ejecución en la línea 4 porque la clase Fruta no implementa la interfaz java.lang.Comparable y los objetos Fruta no son comparables.
A: El programa tiene un error de ejecución en la línea 4 porque la clase Fruta no implementa la interfaz java.lang.Comparable y los objetos Fruta no son comparables.

Q: Analice el siguiente programa. ¿Cuál es el resultado al ejecutarlo? [Image]
- Un objeto java.util.Date no es clonable.
- x = y en System.out.println(x = y) causa un error de compilación porque no se puede tener una sentencia de asignación dentro de una sentencia.
- x = y in System.out.println(x = y) causa un error de ejecución porque no se puede tener una sentencia de asignación dentro de una sentencia.
- El programa tiene un error de compilación porque el tipo de retorno del método clone() es java.lang.Object.
A: El programa tiene un error de compilación porque el tipo de retorno del método clone() es java.lang.Object.

Q: Analice el siguiente programa. ¿Cuál es el resultado al ejecutarlo?
[Image]
- [Culiacan]
- [Culiacan, Altata]
- [Culiacan, Altata, Choix]
- [Culiacan, Choix]
A: [Culiacan, Choix]

Q: Analice el siguiente programa. ¿Cuáles afirmaciones son las correctas?
[Image]
- El programa tiene un error de compilación porque el método clone() está protegido en la clase Object.
- Después de anular el método clone() y hacerlo público en la clase Circulo, el programa puede compilar y ejecutarse sin problemas, pero y es nulo si Circulo no implementa la interfaz Cloneable.
- Para permitir que un objeto Circulo sea clonado, la clase Circulo tiene que anular el método clone() e implementar la interfaz java.lang.Cloneable.
- Si ObjetoGeometrico implementa Cloneable y Circulo sobrescribe el método clone(), el método clone() funcionará bien para clonar objetos Circulo.
A: El programa tiene un error de compilación porque el método clone() está protegido en la clase Object.; Después de anular el método clone() y hacerlo público en la clase Circulo, el programa puede compilar y ejecutarse sin problemas, pero y es nulo si Circulo no implementa la interfaz Cloneable.; Para permitir que un objeto Circulo sea clonado, la clase Circulo tiene que anular el método clone() e implementar la interfaz java.lang.Cloneable.; Si ObjetoGeometrico implementa Cloneable y Circulo sobrescribe el método clone(), el método clone() funcionará bien para clonar objetos Circulo.

Q: ¿Cuál de las siguentes afirmaciones es falsa?
- Si compilas una interfaz sin errores, se crea un archivo .class para la interfaz.
- Si compilas una clase sin errores pero con advertencias, se crea un archivo .class.
- Si compilas una clase con errores, un archivo .class es creado para la clase.
- Si compilas una interfaz sin errores, pero con advertencias, un archivo .class es creado para la interfaz.
A: Si compilas una clase con errores, un archivo .class es creado para la clase.

Q: ¿Cuáles de las siguentes afirmaciones son verdaderas?
- La herencia modela la relación "es-un" entre dos clases.
- Una relación "es-un" fuerte describe una relación de herencia directa entre dos clases.
- Una relacion "es-un" debil describe que una clase tiene ciertas propiedades.
- Una relacion fuerte "es-un" puede ser representada usando herencia de clases.
- Una relación débil "es-un" puede ser representada usando interfaces
A: La herencia modela la relación "es-un" entre dos clases.; Una relación "es-un" fuerte describe una relación de herencia directa entre dos clases.; Una relacion "es-un" debil describe que una clase tiene ciertas propiedades.; Una relacion fuerte "es-un" puede ser representada usando herencia de clases.; Una relación débil "es-un" puede ser representada usando interfaces

Q: ¿Cuál es la relación más adecuada entre un objeto Empleado y un objeto Facultad?
- Composicion
- Agregacion
- Herencia
- Ninguna
A: Herencia

Q: Supongamos que un empleado sólo puede trabajar para una empresa. ¿Cuál es la relación más adecuada entre un objeto Empresa y un objeto Empleado?
- Ninguna
- Agregacion
- Herencia
- Composicion
A: Composicion

Q: La relación entre una interfaz y la clase que la implementa es:
- Composición
- Agregación
- Herencia
- Ninguna
A: Herencia

Q: Analice la clase Racional. ¿Cuáles de las siguientes expresiones son correctas?
- ```Racional.doubleValue();```
- ```Racional.doubleValue("5/4");```
- ```new Racional(5, 4).doubleValue();```
- ```new Racional(5, 4).toDoubleValue();```
- ```new Racional(5, 4).intValue();```
A: ```new Racional(5, 4).doubleValue();```; ```new Racional(5, 4).intValue();```

Q: La clase Racional hereda de la clase Number e implementa la interfaz Comparable del paquete java.lang. Analice el siguiente código y determine el comportamiento del programa.
[Image]
- El programa tiene un error de compilación porque numeros está declarado como Number[], por lo que no se le puede asignar {new Racional(1, 2), new Integer(4), new Double(5.6)}.
- El programa tiene un error de ejecución porque numeros está declarado como Number[], por lo que no puedes asignarle {new Racional(1, 2), new Integer(4), new Double(5.6)}.
- El programa tiene un error de compilación porque numeros está declarado como Number[], por lo que no puedes pasarlo a Arrays.sort(Object[]).
- El programa tiene un error de ejecución porque los métodos compareTo de las clases Racional, Integer y Double no comparan el valor de un tipo con un valor de otro tipo.
A: El programa tiene un error de ejecución porque los métodos compareTo de las clases Racional, Integer y Double no comparan el valor de un tipo con un valor de otro tipo.

Q: ¿Cuáles de las siguentes sentencias son verdaderas?
- Una clase debe describir una sola entidad y todas las operaciones de la clase deben encajar lógicamente para apoyar un propósito coherente.
- Una clase debe contener siempre un constructor no-arg.
- Los constructores deben ser siempre públicos.
- Los constructores pueden ser protegidos.
A: Una clase debe describir una sola entidad y todas las operaciones de la clase deben encajar lógicamente para apoyar un propósito coherente.; Los constructores pueden ser protegidos.

Q: ¿Cuál de las siguentes sentencias se considera como mala práctica o mal diseño de código?
- Un campo de datos se deriva de otros campos de datos de la misma clase.
- Un método debe ser invocado después/antes de invocar otro método de la misma clase.
- Un método es un método de instancia, pero no hace referencia a ningún campo de datos de instancia ni invoca métodos de instancia.
- Un constructor pasa un parámetro para inicializar un campo de datos estático.
- Todas las anteriores.
A: Todas las anteriores.