Actualmente estoy leyendo Java efectivo por Joshua Bloch y el elemento 17 es 'Diseñar y documentar para herencia o prohibirlo'. El autor sugiere prohibir la herencia por defecto.¿Puede eliminar la finalización de una definición de clase romper la compatibilidad con versiones anteriores?
¿Es seguro declarar las clases final por defecto y en una versión posterior eliminar la palabra clave final si es necesario ampliar la clase? ¿Romperá la compatibilidad hacia atrás con el código compilado con una versión anterior?
Si es así, parece que es una apuesta más segura hacer que todas las clases sean definitivas y solo eliminarlas en versiones futuras si existe una demanda bien respaldada.
Depende en cierta medida de la cantidad de API viva y respirable que tenga. Si realiza cambios y lanzamientos todo el tiempo, no es tan malo esperar una semana para obtener la capacidad de heredar. Si, por otro lado, Java hiciera eso con sus clases básicas de JDK por defecto, los programadores no tardarían en tener que esperar 5 años para la "solución". –
@Kirk Woll si se necesitan 5 años para pasar de final a no final, ¿cuánto tiempo se tarda en pasar de no final a final? – emory