Nivel de dificultad: Intermedio Predecir el resultado de los siguientes programas Java. Programa 1: Java public class Calculator { int num = 100; public void calc(int num) { this.num = num * 10; } public void printNum() { System.out.println(num); } public static void main(String[] args) { Calculator obj = new Calculator(); obj.calc(2); obj.printNum(); } } Opciones: A) 20 B) 100 C) 1000 D) 2 Respuesta: A) 20 Explicación : Aquí el nombre de la variable de instancia de clase (num) es el mismo que calcular() nombre de la variable local del método (núm). Entonces, para hacer referencia a la variable de instancia de clase desde calcular() método este Se utiliza palabra clave. Entonces en declaración este.núm = núm * 10 en un representa la variable local del método cuyo valor es 2 y este.num representa una variable de instancia de clase cuyo valor inicial es 100. Ahora en imprimirNum() método ya que no tiene una variable local cuyo nombre sea el mismo que la variable de instancia de clase, por lo que podemos usar directamente en un para hacer referencia a la variable de instancia aunque este.num se puede utilizar. Programa 2: Java public class MyStuff { String name; MyStuff(String n) { name = n; } public static void main(String[] args) { MyStuff m1 = new MyStuff('guitar'); MyStuff m2 = new MyStuff('tv'); System.out.println(m2.equals(m1)); } @Override public boolean equals(Object obj) { MyStuff m = (MyStuff) obj; if (m.name != null) { return true; } return false; } } Opciones: A) El resultado es verdadero y MyStuff cumple el contrato Object.equals(). B) El resultado es falso y MyStuff cumple el contrato Object.equals(). C) El resultado es verdadero y MyStuff NO cumple con el contrato Object.equals(). D) El resultado es falso y MyStuff NO cumple con el contrato Object.equals(). Respuesta : C) El resultado es verdadero y MyStuff NO cumple con el contrato Object.equals(). Explicación : Como es igual(Objeto obj) El método de la clase Objeto compara dos objetos sobre la base de una relación de equivalencia. Pero aquí solo estamos confirmando que el objeto es nulo o no Entonces no cumple Objeto.igual() contrato. Como m1 no es nulo verdadero se imprimirá. Programa 3: Java class Alpha { public String type = 'a '; public Alpha() { System.out.print('alpha '); } } public class Beta extends Alpha { public Beta() { System.out.print('beta '); } void go() { type = 'b '; System.out.print(this.type + super.type); } public static void main(String[] args) { new Beta().go(); } } Opciones: A) alfa beta b b B) alfa beta a b C) beta alfa b b D) beta alfa a b Respuesta : A) alfa beta b b Explicación : la declaración nueva Beta().ir() se ejecuta en dos fases. en primera fase Beta Se llama al constructor de clases. No hay ningún miembro de instancia presente en Beta clase. Así que ahora Beta Se ejecuta el constructor de la clase. Como Beta la clase se extiende Alfa clase así que la llamada va a Alfa constructor de clase como primera declaración por defecto (puesto por el compilador) es súper() en el Beta constructor de clases. Ahora como una variable de instancia ( tipo ) está presente en Alfa clase para que obtenga memoria y ahora Alfa Se ejecuta el constructor de la clase y luego se llama a regresar a Beta siguiente declaración del constructor de clase. Entonces alfa beta está impreso. En segunda fase ir() Se llama al método en este objeto. Como solo hay una variable ( tipo ) en el objeto cuyo valor es a . Entonces se cambiará a b e impreso dos veces. El súper palabra clave aquí no sirve de nada. Programa 4: Java public class Test { public static void main(String[] args) { StringBuilder s1 = new StringBuilder('Java'); String s2 = 'Love'; s1.append(s2); s1.substring(4); int foundAt = s1.indexOf(s2); System.out.println(foundAt); } } Opciones: A) -1 B) 3 C) 4 D) A Excepción StringIndexOutOfBounds se lanza en tiempo de ejecución. Respuesta : c) 4 Explicación : agregar (cadena de cadena) métodoconcatenar la cadena a s1 . El subcadena (índice int) El método devuelve la cadena desde el índice dado hasta el final. Pero como no hay ninguna variable de cadena para almacenar la cadena devuelta, será destruida. Ahora índice de (cadena s2) El método devuelve el índice de la primera aparición de s2 . Entonces 4 se imprime como s1='JavaLove'. Programa 5: Java class Writer { public static void write() { System.out.println('Writing...'); } } class Author extends Writer { public static void write() { System.out.println('Writing book'); } } public class Programmer extends Author { public static void write() { System.out.println('Writing code'); } public static void main(String[] args) { Author a = new Programmer(); a.write(); } } Opciones: A) Escribir... B) Escribir un libro C) Escribir código D) La compilación falla Respuesta : B) Libro de escritura Explicación : Dado que los métodos estáticos no se pueden anular, no importa qué objeto de clase se cree. Como a es un Autor tipo referenciado así que siempre Autor Se llama al método de clase. si eliminamos escribir() método de Autor clase entonces Escritor El método de clase se llama como Autor la clase se extiende Escritor clase.