Anulando métodos de diferentes paquetes en Java

Requisito previo: anulando en Java , los paquetes en Java
proporcionan más capas de encapsulación para las clases. Por lo tanto, la visibilidad de un método en diferentes paquetes es diferente a la del mismo paquete.

¿Cómo JVM encuentra qué método llamar?
Cuando ejecutamos un programa Java,

  • JVM comprueba la clase de tiempo de ejecución del objeto.
  • JVM comprueba si la clase de tiempo de ejecución del objeto ha anulado el método de la clase declarada.
  • Si es así, ese es el método llamado. De lo contrario, se llama al método de la clase declarada.

Por lo tanto, el punto clave es verificar la visibilidad del método en diferentes paquetes.

Los siguientes son los casos en los que veremos la anulación de métodos en diferentes paquetes

1. Anulación de método privado: en este caso, el modificador de acceso del método que queremos anular es privado.

// Filename: Hello.java
package a;
public class Hello {
    private void printMessage()
    {
        System.out.println("Hello");
    }
    public void fun()
    {
        printMessage();
    }
}
  
// Filename: World.java
package b;
import a.Hello;
public class World extends Hello {
    private void printMessage()
    {
        System.out.println("World");
    }
  
    public static void main(String[] args)
    {
        Hello gfg = new World();
        gfg.fun();
    }
}

Producción:

Hello

Como el método privado de la clase principal no está visible en la clase secundaria. Por lo tanto, aquí no tiene lugar ninguna anulación.
Si no sabe cómo ejecutar este programa desde la terminal, cree el archivo Hello.java y el archivo World.java como se especifica arriba y ejecute estos comandos.

2. Anulación de método público: en este caso, el modificador de acceso del método que queremos anular es público.

// Hello.java
package a;
public class Hello {
    public void printMessage()
    {
        System.out.println("Hello");
    }
}
  
// World.java
package b;
import a.Hello;
public class World extends Hello {
    public void printMessage()
    {
        System.out.println("World");
    }
  
    public static void main(String[] args)
    {
        Hello gfg = new World();
        gfg.printMessage();
    }
}

Producción:

World

El método público es accesible en todas partes, por lo tanto, cuando se llama a printMessage(), jvm puede encontrar el método anulado y así llamarlo.
Por lo tanto, la anulación tiene lugar aquí.

3. Anulación del método predeterminado

// Hello.java
package a;
public class Hello {
    void printMessage()
    {
        System.out.println("Hello");
    }
}
  
// World.java
package b;
import a.Hello;
public class World extends Hello {
    void printMessage()
    {
        System.out.println("World");
    }
    public static void main(String[] args)
    {
        Hello gfg = new World();
        gfg.printMessage();
    }
}
error: printMessage() is not public in Hello; cannot be accessed from outside package

La visibilidad de un método predeterminado está solo dentro de su paquete. Por lo tanto, no se puede acceder fuera del paquete.
Por lo tanto, no anular en este caso.

Predecir la salida del siguiente programa

/* Hello.java */
package a;
public class Hello {
    public void doIt()
    {
        printMessage();
    }
    void printMessage()
    {
        System.out.println("Hello");
    }
}
  
/* World.java */
package b;
import a.Hello;
public class World {
    private static class GFG extends Hello {
        void printMessage()
        {
            System.out.println("World");
        }
    } 
    public static void main(String[] args)
    {
        GFG gfg = new GFG();
        gfg.doIt();
    }
}

Producción:

Hello

Explicación
La visibilidad de printMessage() es predeterminada en el paquete a. Por lo tanto, aquí no tiene lugar ninguna anulación.

Este artículo es una contribución de Shubham Juneja. Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@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 *