En Java, podemos aplicar una variedad de modificadores a clases, métodos, bloques y variables y cada uno tiene un caso de uso diferente y todos estos definen principalmente cómo y dónde se puede acceder y modificar esas clases, métodos, bloques y variables. . Pero no todos los modificadores se pueden aplicar simultáneamente debido a alguna contradicción entre su definición y lo que esos modificadores nos permiten hacer. Por lo tanto, la combinación de modificadores que no se pueden aplicar simultáneamente forma una combinación de modificadores ilegal y siempre que usamos uno, obtenemos un error de tiempo de compilación.
Por ejemplo: se puede acceder a un método declarado como público desde cualquier parte del programa, pero solo se puede acceder a un método privado dentro de la clase en la que se ha declarado. Por lo tanto, si tratamos de aplicar modificadores públicos y privados a un método, formará una combinación de modificadores ilegal y dará un error de tiempo de compilación como se muestra a continuación.
Java
// Java program to illustrate // illegal modifier combination import java.io.*; class GFG { public static void main(String[] args) { System.out.println("GFG!"); } // the below method has illegal modifier combination protected public void m1() {} }
El código anterior arroja un error en tiempo de compilación como:
GFG.java:13: error: illegal combination of modifiers: public and protected protected public void m1() {} ^ 1 error
Ahora, antes de comprender las diferentes combinaciones de modificadores ilegales con resumen , primero entendamos la palabra clave abstracta .
En Java, el resumen es un modificador que es aplicable para clases y métodos pero no para variables y nos ayuda a implementar Abstracción en Java . La abstracción es una forma en la que solo exponemos los servicios que ofrecemos mientras ocultamos los detalles internos y la implementación.
Aprendamos sobre el método abstracto y la clase abstracta:
Método abstracto
Aunque no sabemos acerca de la implementación, podemos escribir un método con un modificador abstracto , es decir, la única declaración está disponible pero no implementada. Por lo tanto, los métodos abstractos no deberían tener a nadie y deberían terminar con un punto y coma. Por esta razón, toda clase que extienda una clase abstracta debe implementar todos los métodos abstractos o debe declararse como abstracta.
A continuación se muestra un ejemplo que demuestra el método abstracto:
Java
// Java program to illustrate // Abstract method // Importing required packages import java.util.*; // Declaring an abstract class abstract class Animal { // Declaring an abstract method public abstract String getSound(); } // Declaring a class Cat by extending // the above Animal class class Cat extends Animal { // Implementing the above // abstract method of animal class public String getSound() { return "Meow!"; } // main method public static void main(String[] args) { // Creating an object of type class Cat Cat c = new Cat(); // Calling getSound method System.out.println(c.getSound()); } }
Meow!
Clase abstracta
Una clase abstracta es aquella para la que no podemos instanciar objetos y básicamente define y proporciona un modelo para clases derivadas y también métodos que las clases concretas deben implementar al heredar esa clase abstracta.
Cualquier clase que actúe como una generalización de las clases que la heredan, puede ser declarada como abstracta. Por ejemplo, la clase Animal es una generalización para todo tipo de animales. Todos los animales tienen algunas propiedades comunes pero diferentes valores e implementaciones. Entonces, una clase Animal podría verse así:
abstract class Animal { public abstract String getSound(); public abstract String getColour(); public abstract move(); // Many more methods follow... }
Ahora, antes de aprender todas las combinaciones de modificadores ilegales en resumen, he aquí una sugerencia rápida:
Nota: Como abstracto nunca habla de implementación, cualquier modificador que tenga algo que ver con la implementación forma una combinación ilegal con abstracto. Además, la palabra clave abstracta promueve la herencia y el polimorfismo y, por lo tanto, cualquier modificador que restrinja la herencia o el polimorfismo también forma una combinación ilegal. Estos se pueden usar como reglas generales al identificar aquellos modificadores que forman una combinación ilegal con resumen.
Todas las combinaciones ilegales de modificadores para métodos wrt Abstract en Java
Las siguientes son varias combinaciones ilegales de modificadores para métodos wrt abstract:
1. Resumen final
- Error en tiempo de compilación: combinación ilegal de modificadores: ‘final’ y ‘abstract’
- Motivo: los métodos abstractos deben anularse en una clase secundaria para proporcionar implementación, mientras que los métodos finales no pueden anularse. Por lo tanto, es una combinación ilegal.
- Resolución: podemos declarar el método solo como final, lo que restringirá la anulación del método en las clases secundarias O podemos declararlo solo como abstracto e implementar ese método en las clases secundarias según sea necesario.
2. Resumen nativo
- Error en tiempo de compilación: combinación ilegal de modificadores: ‘nativo’ y ‘abstracto’
- Motivo: para los métodos nativos, la implementación ya está presente en algunos otros lenguajes (C o C++), pero para el método abstracto, no debería haber una implementación. Entonces, también forma una combinación ilegal.
- Resolución: podemos usar nativo solo si la implementación ya existe en otros idiomas O mantener el método solo como abstracto.
3. Resumen privado
- Error en tiempo de compilación: combinación ilegal de modificadores: ‘privado’ y ‘abstracto’
- Motivo: los métodos abstractos deben estar disponibles para el niño para proporcionar implementación, mientras que los métodos privados no están disponibles para las clases de niños, por lo tanto, es una combinación ilegal.
- Resolución: si el método no se requiere en las clases secundarias y debe ser utilizado solo por la clase en la que está definido, declárelo solo como privado O declárelo como abstracto e impleméntelo en las clases secundarias.
4. Resumen estático
- Error en tiempo de compilación: combinación ilegal de modificadores: ‘estático’ y ‘abstracto’
- Motivo: los métodos abstractos deben anularse en una clase secundaria para proporcionar implementación, mientras que los métodos estáticos no pueden anularse (un método estático puede ocultarse, pero eso es fundamentalmente diferente a la anulación).
- Resolución: si desea que el método sea implementado por clases secundarias, manténgalo abstracto O solo declare como estático si no se permite la anulación.
5. Resumen estricto
- Error en tiempo de compilación: combinación ilegal de modificadores: ‘strictfp’ y ‘abstract’
- Motivo: si un método se declara como strictfp, entonces garantiza que todos los cálculos de punto flotante deben seguir el estándar IEEE 754 y brindarán resultados independientes de la plataforma. Básicamente, habla de implementación y, por lo tanto, forma una combinación ilegal con resumen.
- Resolución: Declare solo como abstracto O declare como strictfp para garantizar cálculos de punto flotante independientes de la plataforma.
6. Resumen sincronizado
- Error en tiempo de compilación: combinación ilegal de modificadores: ‘sincronizado’ y ‘abstracto’
- Motivo: para evitar la ejecución simultánea de un método en un objeto determinado por varios subprocesos, la palabra clave sincronizada se utiliza para evitar problemas de incoherencia. Entonces, cuando sincronizamos un método eso implica que estamos sincronizando el código en él. Como resultado, la implementación es necesaria. Por lo tanto, esta combinación también es ilegal.
- Resolución: Declare el método solo como abstracto O manténgalo sincronizado si la seguridad de subprocesos es importante.