final en Java se utiliza para:
Características y matices:
final debe ser inicializada al declararse o en el constructor;final no permite cambiar la referencia, pero se puede cambiar el objeto al que apunta (¡si no es inmutable!);final (por ejemplo, String, Math);final, incluso si la clase es heredada.final class A {} // no se puede hacer class B extends A class Parent { final void foo() { } } class Child extends Parent { // void foo() {} // error: no se puede retornar foo } final int COUNT = 10;
¿Se puede cambiar el estado del objeto al que apunta una variable final?
Respuesta: Sí, si no es un objeto inmutable. Por ejemplo:
final List<String> names = new ArrayList<>(); names.add("Vasya"); // Esto es permitido — se cambia el objeto por la referencia, pero no la referencia misma names = new ArrayList<>(); // Error de compilación
Historia
Historia
Historia
Surgió la tarea de ampliar la API externa, construida sobre clases finales. Debido a ellas, resultó imposible hacer la extensión, tuvieron que duplicar la lógica y mantener dos ramas independientes del producto, lo que complicó las migraciones.