Scala 組合和繼承–定義 final 成員

2018-09-28 18:21 更新

組合和繼承–定義 final 成員

在定義類的繼承關(guān)系時(shí),有時(shí)你不希望基類的某些成員被子類重載,和 Java 類似,在 Scala 中也是使用 final 來修飾類的成員。比如在前面的 ArrayElement 例子,在 demo 方法前加上 final 修飾符:

class ArrayElement extends Element { 
  final override def demo() { 
    println("ArrayElement's implementation invoked") 
  } 
} 

如果 LineElement 試圖重載 demo,則會(huì)報(bào)錯(cuò):

scala> class LineElement extends ArrayElement { 
     |   override def demo() { 
     |     println("LineElement's implementation invoked")
     |   }
     | 
     | } 
<console>:10: error: overriding method demo in class ArrayElement of type ()Unit;
 method demo cannot override final member
         override def demo() { 

如果你希望某個(gè)類不可以派生子類,則可以在類定義前加上 final修飾符:

final class ArrayElement extends Element { 
   override def demo() { 
    println("ArrayElement's implementation invoked") 
  } 
} 

此時(shí)如果還是重載 LineElement 的 demo 函數(shù),則會(huì)報(bào)錯(cuò):

scala> class LineElement extends ArrayElement { 
     |   override def demo() { 
     |     println("LineElement's implementation invoked")
     |   }
     | 
     | } 
<console>:9: error: illegal inheritance from final class ArrayElement
       class LineElement extends ArrayElement { 
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)