Salida del programa Java | conjunto 7

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *