Nivel de dificultad : Intermedio
Prediga la salida de los siguientes programas Java.
Programa 1:
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 el nombre de la variable local del método calc() (num). Entonces, para hacer referencia a la variable de instancia de clase del método calc() , se usa esta palabra clave. Entonces, en la declaración this.num = num * 10 , num representa la variable local del método cuyo valor es 2 y this.num representa la variable de instancia de clase cuyo valor inicial es 100. Ahora en el método printNum() , ya que no tiene una variable local cuyo el nombre es el mismo que la variable de instancia de clase, por lo que podemos usar directamente numpara hacer referencia a la variable de instancia, aunque se puede usar this.num .
Programa 2:
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) La salida es verdadera y MyStuff cumple con el contrato Object.equals().
B) La salida es falsa y MyStuff cumple con el contrato Object.equals().
C) La salida es verdadera y MyStuff NO cumple con el contrato Object.equals().
D) La salida es falsa y MyStuff NO cumple con el contrato Object.equals().
Respuesta: C) La salida es verdadera y MyStuff NO cumple con el contrato Object.equals().
Explicación: como método equals(Object obj) en la clase Object, compara dos objetos sobre la base de la relación de equivalencia. Pero aquí solo estamos confirmando que el objeto es nulo o no, por lo que no cumple con el contrato Object.equals() . Como m1 no es nulo, se imprimirá verdadero.
Programa 3:
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 bb
B) alfa beta ab
C) beta alfa bb
D) beta alfa ab
Respuesta: A) alpha beta bb
Explicación: la sentencia new Beta().go() se ejecuta en dos fases. En la primera fase se llama al constructor de clase Beta . No hay ningún miembro de instancia presente en la clase Beta . Entonces ahora se ejecuta el constructor de clase Beta . Como la clase Beta extiende la clase Alpha , la llamada se dirige al constructor de la clase Alpha ya que la primera declaración de forma predeterminada (colocada por el compilador) es super() en el constructor de la clase Beta . Ahora, como una variable de instancia ( tipo ) está presente en la clase Alpha , obtendrá memoria y ahora Alphase ejecuta el constructor de la clase, luego se llama a volver a la siguiente declaración del constructor de la clase Beta . Entonces se imprime alfa beta .
En la segunda fase , se llama al método go() en este objeto. Como solo hay una variable ( tipo ) en el objeto cuyo valor es a . Entonces se cambiará a b y se imprimirá dos veces. La palabra clave super aquí no sirve de nada.
Programa 4:
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) Se lanza una excepción StringIndexOutOfBoundsException en tiempo de ejecución.
Respuesta: C) 4
Explicación: método de agregar (String str) , concatenar el str a s1 . El método substring(int index) devuelve la string desde el índice dado hasta el final. Pero como no hay ninguna variable de string para almacenar la string devuelta, se destruirá . Ahora, el método indexOf (String s2) devuelve el índice de la primera aparición de s2 . Así que 4 se imprime como s1=”JavaLove”.
Programa 5:
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) Escribiendo…
B) Escribiendo un libro
C) Escribiendo 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 tipo de autor referenciado, siempre se llama al método de la clase Autor . Si eliminamos el método write() de la clase Autor , se llama al método de la clase Escritor , ya que la clase Autor amplía la clase Escritor .
Este artículo es una contribución de Gaurav Miglani . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA