Acceso más restrictivo a un método de clase derivada en Java

Como privado, protegido y público (modificadores de acceso) afectan la accesibilidad y el alcance del campo. Por lo tanto, el método no puede ser privado y se llama desde fuera de la clase. 

En el Programa 1: Creamos el objeto para la clase Derivada y llamamos a la función foo, pero esta función foo es privada, es decir, su alcance está solo en la clase Derivada, lo que genera un error cuando queremos acceder a través de la clase Principal.

En el Programa 2: creamos el objeto para la clase Derivada y llamamos a la función foo, y esta función foo es pública, por lo que no dará un error porque podemos acceder a esto desde cualquier parte del paquete. 

En el Programa 3: Aquí creamos el objeto para la clase base y luego llamamos a la función foo, ahora la función foo en la clase Derivada y Base debe ser pública o protegida (nunca privada), porque el método privado tiene accesibilidad solo en ese ámbito.

Nota: la función llamada nunca debe ser privada porque su alcance solo está entre corchetes ({}) si la función llamada está en la clase base y la clase derivada la anula, entonces el método anulado en la clase derivada también será público o protegido.

Programa 1

Java

// file name: Main.java
class Base {
    public void foo() { System.out.println("Base"); }
}
 
class Derived extends Base {
 
    // compiler error
    private void foo() { System.out.println("Derived"); }
}
 
public class Main {
    public static void main(String args[])
    {
        Derived d = new Derived();
        d.foo();
    }
}

Producción : 

prog.java:10: error: foo() in Derived cannot override foo() in Base
    private void foo() { System.out.println("Derived"); } 
                 ^
  attempting to assign weaker access privileges; was public
prog.java:16: error: foo() has private access in Derived
        d.foo();
         ^
2 errors

Programa 2 

Java

// file name: Main.java
class Base {
    private void foo() { System.out.println("Base"); }
}
 
class Derived extends Base {
 
    // works fine
    public void foo() { System.out.println("Derived"); }
}
 
public class Main {
    public static void main(String args[])
    {
        Derived d = new Derived();
        d.foo();
    }
}
Producción

Derived

Programa 3

Java

// file name: Main.java
 
class Base {
    public void foo() { System.out.println("Base"); }
}
 
class Derived extends Base {
    // if foo is private in derived class then it will
    // generate an error
    public void foo() { System.out.println("Derived"); }
}
 
public class Main {
    public static void main(String args[])
    {
        Base d = new Base();
        d.foo();
    }
}
Producción

Base

Este artículo es una contribución de Khushi Agarwal. 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 *