final
是一個關鍵字,用於防止超類成員繼承為派生類。也可以宣告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
在父類別中的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