Scala final關鍵字
final
是一個關鍵字,用於防止超類成員繼承爲派生類。也可以聲明final
變量,方法和類。
Scala final變量示例
不能覆蓋子類中的final
變量,我們來看下面一個例子。
Scala單繼承示例
class Vehicle{
final val speed:Int = 60
}
class Bike extends Vehicle{
override val speed:Int = 100
def show(){
println(speed)
}
}
object Demo{
def main(args:Array[String]){
var b = new Bike()
b.show()
}
}
將上面代碼保存到源文件:Demo.scala中,使用以下命令編譯並執行代碼 -
D:\software\scala-2.12.3\bin>scalac Demo.scala
Demo.scala:5: error: overriding value speed in class Vehicle of type Int;
value speed cannot override final member
override val speed:Int = 100
^
one error found
Scala final方法
在父類中的final
方法聲明不能被覆蓋。 如果不想讓它被覆蓋,則可以把方法定義成爲final
。嘗試覆蓋final
方法將導致編譯時錯誤。
Scala final方法示例
class Vehicle{
final def show(){
println("vehicle is running")
}
}
class Bike extends Vehicle{
//override val speed:Int = 100
override def show(){
println("bike is running")
}
}
object Demo{
def main(args:Array[String]){
var b = new Bike()
b.show()
}
}
將上面代碼保存到源文件:Demo.scala中,使用以下命令編譯並執行代碼 -
D:\software\scala-2.12.3\bin>scalac Demo.scala
Demo.scala:8: error: overriding method show in class Vehicle of type ()Unit;
method show cannot override final member
override def show(){
^
one error found
Scala final類示例
也可以定義final
類,final
類不能繼承。 如果定義了一個類爲final
類,那就不能進一步擴展了。
final class Vehicle{
def show(){
println("vehicle is running")
}
}
class Bike extends Vehicle{
override def show(){
println("bike is running")
}
}
object Demo{
def main(args:Array[String]){
var b = new Bike()
b.show()
}
}
將上面代碼保存到源文件:Demo.scala中,使用以下命令編譯並執行代碼 -
D:\software\scala-2.12.3\bin>scalac Demo.scala
Demo.scala:8: error: illegal inheritance from final class Vehicle
class Bike extends Vehicle{
^
one error found