Requisitos previos: anulación de métodos en Java y modificador de acceso en Java
Sobrescritura de métodos
En cualquier lenguaje de programación orientado a objetos, la sobreescritura es una característica que permite que una subclase o clase secundaria proporcione una implementación específica de un método que ya proporciona su superclase o clase principal. Cuando un método en una subclase tiene el mismo nombre, los mismos parámetros o firma y el mismo tipo de retorno (o subtipo) que un método en su superclase, entonces se dice que el método en la subclase anula el método en la superclase. clase.
La anulación de métodos es una de las formas en que Java logra el polimorfismo en tiempo de ejecución. La versión de un método que se ejecuta estará determinada por el objeto que se utiliza para invocarlo. Si se usa un objeto de una clase principal para invocar el método, se ejecutará la versión de la clase principal, pero si se usa un objeto de la subclase para invocar el método, se ejecutará la versión de la clase secundaria. En otras palabras, es el tipo de objeto al que se hace referencia (no el tipo de la variable de referencia) lo que determina qué versión de un método anulado se ejecutará.
Modificadores de acceso
Como sugiere el nombre, los modificadores de acceso en Java ayudan a restringir el alcance de una clase, constructor, variable, método o miembro de datos. Hay cuatro tipos de modificadores de acceso disponibles en Java:
- Predeterminado: no se requiere palabra clave
- Privado
- Protegido
- Público
Anulación de métodos con modificadores de acceso
Solo hay una regla al realizar la anulación de métodos con modificadores de acceso, es decir
Si está anulando cualquier método, el método anulado (es decir, declarado en la subclase) no debe ser más restrictivo.
Restricciones del modificador de acceso en orden decreciente:
- privado
- defecto
- protegido
- público
es decir, privado está más restringido que predeterminado y predeterminado está más restringido que protegido y así sucesivamente.
Ejemplo 1:
class A { protected void method() { System.out.println("Hello"); } } public class B extends A { // Compile Time Error void method() { System.out.println("Hello"); } public static void main(String args[]) { B b = new B(); b.method(); } }
Compile Time Error
Nota: En el ejemplo anterior, la clase A de superclase definió un método cuyo modificador de acceso está protegido . Al realizar la anulación de métodos en SubClass Class B, no definimos ningún modificador de acceso, por lo que se utilizará el modificador de acceso predeterminado . Por regla general, Predeterminado está más restringido que Protegido , por lo que este programa dará un error de tiempo de compilación. En lugar de default, podríamos haber usado public que está menos restringido que protected .
Ejemplo 2:
class A { protected void method() { System.out.println("Hello"); } } public class B extends A { public void method() { System.out.println("Hello"); } public static void main(String args[]) { B b = new B(); b.method(); } }
Hello
Nota: En el ejemplo anterior, la clase A de superclase definió un método cuyo modificador de acceso está protegido . Mientras realizamos la anulación de métodos en SubClass Class B, definimos el modificador de acceso como Public . Debido a que el modificador de acceso público está menos restringido que el protegido , este programa se compila correctamente.
Publicación traducida automáticamente
Artículo escrito por Shahnawaz_Ali y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA