Java final: cómo utilizar el modificador para clases, métodos y variables

El modificador final se utiliza en Java para crear elementos que no pueden modificarse posteriormente. Puedes aplicar este modificador a clases, métodos y variables. Se utiliza sobre todo para evitar errores y usos indebidos intencionados dentro del código.

¿Qué es Java final?

La mayoría de lenguajes de programación ofrecen la posibilidad de modificar y ampliar el código existente en función de las necesidades. Aunque en principio esto también es posible en Java, a veces puede ser importante que un elemento se almacene como incambiable. El modificador correspondiente se denomina final en Java. Puede utilizarse para restringir el acceso a una clase, un método o una variable. Con él, el valor de una variable final ya no se puede cambiar, las extensiones para una clase final no son posibles y un método final no se puede suspender. De este modo se evita el uso indebido de la sección de código correspondiente.

Hosting
El hosting como nunca lo habías visto
  • Rápido, seguro, flexible y escalable
  • Certificado SSL/DDoS incluido
  • Dominio y asesor personal incluidos

Clases finales

Si utilizas el modificador final de Java para una clase, ésta ya no podrá ser extendida. Este enfoque es muy común, ya que en muchos casos puede ser útil para evitar la derivación de una subclase. Esto se aplica en particular a los tipos de datos básicos como java.lang.Math o java.lang.String, que siempre se declaran como final. Incluso si quieres evitar que se deriven subclases de una clase principal por otras razones, el modificador final es la mejor manera. En el siguiente ejemplo, creamos una clase final y una segunda clase que teóricamente debería extenderla. La clase principal con el método main sigue en tercer lugar:

final class ClaseFinal { 
public void metodoejemplo() { 
System.out.println("Este es un método dentro de la clase final."); 
} 
} 
class OtraClase extends ClaseFinal { 
public void metodoejemplo() { 
System.out.println("Este método está en la otra clase."); 
} 
} 
public class Main { 
public static void main(String[] args) { 
OtraClase NuestraOtraClase = new OtraClase(); 
NuestraOtraClase.metodoejemplo(); 
} 
}
java

El resultado debe ser algo así:

Main.java:6: error: cannot inherit from final ClaseFinal 
class OtraClase extends ClaseFinal 
    ^ 
1 error
java

Métodos finales

Si marcas un método como final, éste no podrá sobreescribirse. Entre otras cosas, esto evita que se le dé un significado diferente a un método de una clase subordinada. Si quieres evitar esto, crea un método final con el modificador final de Java. Por ejemplo, creamos una clase llamada “Emperador” que contiene un método final llamado “miTitulo”. La siguiente clase, “Rey”, extiende “Emperador” e intenta sobrescribir el método “miTitulo”. Para el método main, utilizamos “Principe” e intentamos acceder al método. El código se vería así:

public class Emperador { 
public final void miTitulo() { 
System.out.println("Soy el emperador."); 
} 
} 
public class Rey extends Emperador { 
public final void miTitulo() { 
System.out.println("Soy el rey."); 
} 
} 
public class Principe { 
public static void main(String[] args) { 
Rey miTitulo = new Rey(); 
Rey.miTitulo(); 
} 
}
java

Si aplicas este código, recibirás un mensaje de error:

Main.java:9: error miTitulo() in Rey cannot override miTitulo() in Emperador public final void miTitulo() { 
^ 
overriden method is final
java

Variables finales

El modificador final también se utiliza para crear variables de tal forma que su valor no pueda ser modificado posteriormente. Esto es muy importante si ciertas variables deben permanecer siempre contantes dentro del código. En el siguiente ejemplo, creamos una variable x que tiene el valor 5. A continuación, intentamos incorporar esta variable y asignarle un nuevo valor. El código se verá así:

public class Main { 
final int x = 5; 
 
public static void main(String[] args) { 
Main nuevoValor = new Main(); 
nuevoValor.x = 10; 
System.out.println(nuevoValor.x); 
} 
}
java

Si ahora utilizamos el comando Java System.out.println para mostrar el resultado, recibimos el siguiente mensaje de error:

Main.java:6: error: cannt assign a value to final variable x 
nuevoValor.x = 10; 
    ^ 
1 error
java

Crear variables finales vacías

En Java, las variables deben inicializarse siempre. Sin embargo, si declaras una variable final vacía, puedes inicializarla con un constructor de clase. Se verá así en el código:

public class Ejemplo { 
final String textodeejemplo; 
Ejemplo() { 
textodeejemplo = "Este es tu mensaje."; 
} 
public static void main(String[] args) { 
Ejemplo nuevoObjeto = new Ejemplo(); 
System.out.println(nuevoObjeto.textodeejemplo); 
} 
}
java

Si ejecutas este código, recibirás la siguiente sentencia como resultado:

Este es tu mensaje.
java
¿Le ha resultado útil este artículo?
Page top