在Scala中包含示例的final 关键字
Scalafinal关键字
在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 foundScala中的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 foundScala的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