在Scala中包含示例的final 关键字

Scala final关键字

在Scala中,使用final关键字声明的变量无法在程序中进一步更改。这意味着它在父类中仅声明一次,并且在整个程序中将保持不变(不变)。

语法:

    final val variable_name : datetype = value;

在许多情况下,我们会遇到需要某些实例保持不变的情况,因此请使用final关键字使它们不受子类更改的影响。

示例

让我们以汽车为例,默认情况下,每辆汽车都有四个车轮,因此我们可以使最终变量的车轮数成为变量,以便在继承基类car的任何类中都不能更改它。

码:

class car{
    final val wheels : Int = 4; 
}

class honda extends car{
    val wheels : Int = 3;
    override def wheel(){        println(wheels)
    }
}

object MyClass {
    def main(args: Array[String]) {
        var newcar = new honda(); 
        newcar.wheel()
    }
}

输出结果

error: overriding value wheels in class car of type Int;
 value wheels cannot override final member
    val wheels : Int = 3;
        ^
error: method wheel overrides nothing
    override def wheel(){
                 ^
two errors found

Scala中的final方法

在Scala中,方法也可以声明为final,因此子类都无法覆盖该方法。这使得方法通用代码中的代码可以被其他人使用,但不能被操纵。

语法:

    final def method_name() { }

示例

让我们以汽车为例,有些功能就像每辆汽车的转向一样。因此,可以将此类汽车的转向方法定义为final,以便其他任何类都无法覆盖它。

码:

class car{
    final val wheels : Int = 4; 
    final def drive(){
        println("!! Broom !")
    }
}

class honda extends car{
     override def drive(){
        println("!! Broom Broom !")
    }
}

object MyClass {
    def main(args: Array[String]) {
        var newcar = new honda(); 
        newcar.drive()
    }
}

输出结果

error: overriding method drive in class car of type ()Unit;
 method drive cannot override final member
     override def drive(){
                  ^
one error found

Scala的final 类

通过将final关键字与类一起使用,可以使该类不受继承的影响,即无法继承使用Final关键字定义的类。

语法:

    final class class_name {
    }

示例

如果将汽车类设置为最终类,则不能从另一个类访问该类的任何对象。

码:

final class car{
    val wheels : Int = 4; 
    def drive(){
        println("!! Broom !")
    }
}

class honda extends car{
    override val wheels = 34;   
}

object MyClass {
    def main(args: Array[String]) {
        var newcar = new honda(); 
        newcar.drive()
    }
}

输出结果

error: illegal inheritance from final class car
class honda extends car{
                    ^
one error found