La palabra reservada final en Java

Se emplea final para impedir cambios para elementos de variables, métodos y/o clases. Se puede querer evitar cambios debido a nuestro diseño o la búsqueda de eficiencia y seguridad. Vamos a ver tres maneras de usar la palabra reservada final en Java

1 - Variables

Una variable con la palabra final delante, es una variable cuyo valor no puede cambiar después de que haya sido inicializada. Por ello, esta es la manera de definir constantes en java. Por ejemplo:

       public static final String ERROR_GENERICO = "Error";

El valor de la variable ERROR_GENERICO no va a cambiar una vez que fue inicializada.

Por lo general, en la declaración de variables, la palabra reservada final viene acompañada de static. Además, la mayoría de los programadores declaran a las variables todas en mayúsculas por convención. De esta manera, es fácil reconocer el uso de "variables finales" en los programas.

Ver más información sobre la palabra reservada static.

2 - Métodos

Un método con la palabra final delante, es un método que no puede ser sobreescrito por una subclase. Es decir, si la clase en donde está definido dicho método con final alguna subclase que extienda de ella, esta subclase no podrá contener métodos que lo sobreescriban al primero. Si se intenta hacer esto, el compilador mostrará un error indicando "Overridden method final". Por ejemplo:

     public class ClaseBase{
          public final void agregarDato(){
                 //implementación del método
          }
     }

     public class ClaseQueExtiendeDeClaseBase extends ClaseBase{
            //ESTO NO PUEDE HACERSE:
            public void agregarDato(){
                   //otra implementación para este método sobreescrito
            }
      }

     - Por lo general, se debe evitar declarar "métodos finales". A pesar de que se podría pensar que una subclase no tendría que sobreescribir un método, no podemos estar 100% seguros de lo que otra clase quiere hacer con la nuestra.
     - Los "métodos finales" son más eficientes debido a que el compilador sabe en tiempo de compilación que una llamada a un "método final" no va a ser sobreescrito por algún otro método.
     - Los métodos privados son automáticamente considerados como "finales".

3 - Clases

Una clase con la palabra final delante, es una clase que no puede ser usada (extendida) por otra clase, es decir, no permite hacer un "extend" de ella.













No comments:

Post a Comment