JS++ final修饰符

JS++ final修饰符

在上一节讨论的虚拟方法的背景下,’final’修饰符允许我们形成一个更加正确的规范。

当应用于被覆盖的方法时,’final’修饰符允许我们指定该方法的覆盖是最后一次,不能再被覆盖。这可以防止子类进一步重写该方法。事实上,使用’final’修饰符而不是’override’修饰符可以是很好的防御性编程。只有当我们需要进行子类化时,编译器才会给出一个错误,告诉我们不能进一步覆盖先前指定为 “final “的方法,这时我们才可以使用 “override “修饰符。这可以帮助我们在复杂的代码中防止不可预见的情况和潜在的错误。

说到这里,让我们把Cat.jspp和Dog.jspp改成使用’final’而不是’override’。再一次,为了简洁起见,我将只展示对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();
        }
    }
}

如果你编译代码并观察结果,你应该看到它的行为与我们使用’override’修饰符的情况完全一样。

final “修饰符也可以应用于一个类。当’final’修饰符被应用于一个类时,它意味着该类不能再被子类化。换句话说,进一步的继承被阻止了。例如,尝试将’Cat’声明为’final’,并尝试从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();
}

如果你试图编译这段代码,你会得到一个错误,因为’Cat’是’final’,不能被子类化。

JSPPE0163: Cannot inherit from final class `Animals.Cat' at ...

请从Cat.jspp中删除’final’修饰符,从main.jspp中删除’Kitten’类。这只是一个示范。在进入下一节之前,请确保你的项目可以编译。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

JavaScript 教程