final是一個(gè)關(guān)鍵字,用于防止超類(lèi)成員繼承為派生類(lèi)。也可以聲明final變量,方法和類(lèi)。
不能覆蓋子類(lèi)中的final變量,我們來(lái)看下面一個(gè)例子。
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中,使用以下命令編譯并執(zhí)行代碼 -
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
在父類(lèi)中的final方法聲明不能被覆蓋。 如果不想讓它被覆蓋,則可以把方法定義成為final。嘗試覆蓋final方法將導(dǎo)致編譯時(shí)錯(cuò)誤。
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中,使用以下命令編譯并執(zhí)行代碼 -
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類(lèi)示例
也可以定義final類(lèi),final類(lèi)不能繼承。 如果定義了一個(gè)類(lèi)為final類(lèi),那就不能進(jìn)一步擴(kuò)展了。
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中,使用以下命令編譯并執(zhí)行代碼 -
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