En el contexto de los métodos virtuales discutidos en la sección anterior, el modificador ‘final’ nos permite formar una especificación aún más correcta.
Cuando se aplica a métodos anulados, el modificador ‘final’ nos permite especificar que este método anulado es el último y no puede anularse más. Esto evita que las subclases anulen aún más el método. De hecho, puede ser una buena programación defensiva usar el modificador ‘final’ en lugar del modificador ‘override’. Entonces solo podemos recurrir al modificador ‘anular’ cuando necesitamos subclasificar y el compilador nos da un error que nos dice que no podemos anular más un método previamente especificado como ‘final’. Esto puede ayudarnos a prevenir circunstancias imprevistas y posibles errores en código complejo.
Dicho esto, cambiemos Cat.jspp y Dog.jspp para usar ‘final’ en lugar de ‘override’. Una vez más, en aras de la brevedad, solo mostraré los cambios en Cat.jspp:
external $; module Animals { class Cat : Animal { string _name; Cat(string name) { super("icofont-animal-cat"); _name = name; } final void render() { $element.attr("title", _name); super.render(); } } }
Si compila el código y observa el resultado, debería ver que se comporta exactamente como si usáramos el modificador ‘override’.
El modificador ‘final’ también se puede aplicar a una clase. Cuando el modificador ‘final’ se aplica a una clase, significa que la clase ya no se puede subclasificar. En otras palabras, se evita una mayor herencia. Por ejemplo, intente declarar ‘Cat’ como ‘final’ e intente subclasificarlo desde main.jspp:
import Animals; class Kitten : Cat {} Animal[] animals = [ new Cat("Kitty"), new Cat("Kat"), new Dog("Fido"), new Panda(), new Rhino() ]; foreach(Animal animal in animals) { animal.render(); }
Si intenta compilar este código, obtendrá un error porque ‘Cat’ es ‘final’ y no se puede subclasificar:
JSPPE0163: Cannot inherit from final class `Animals.Cat' at ...
Elimine el modificador ‘final’ de Cat.jspp y elimine la clase ‘Gatito’ de main.jspp. Esto fue solo una demostración. Asegúrese de que su proyecto se compile antes de pasar a la siguiente sección.