在scala里,類繼承有兩點限制: 重寫方法需要使用override關鍵字; 只有主構造函數才能往父類構造函數中傳參數。 在java1.5中引入了override註解,但不強制使用。不過在scala中要想重寫方法必須使用override關鍵字。如果確實重寫了父類的方法又不使用override關鍵字的... ...
在scala里,類繼承有兩點限制:
- 重寫方法需要使用override關鍵字;
- 只有主構造函數才能往父類構造函數中傳參數。
在java1.5中引入了override註解,但不強制使用。不過在scala中要想重寫方法必須使用override關鍵字。如果確實重寫了父類的方法又不使用override關鍵字的話,則會在編譯時報錯,提示沒有使用override修飾符。
scala的副構造函數必須調用主構造函數或是另一個副構造函數。只有在主構造函數中才能向父類的構造函數中傳遞數據。可以看出來主構造函數如同父類和子類中間的一道關卡:它既負責完成子類的初始化,也負責與父類的溝通。
下麵的這段代碼演示了下上述內容:
class Vehicle(val id: Int, val year: Int) { override def toString(): String = "ID: " + id + " Year: " + year } class Car(override val id: Int, override val year: Int, var fuelLevel: Int) extends Vehicle(id, year) { override def toString(): String = super.toString() + " Fuel Level: " + fuelLevel } val car = new Car(1, 2009, 100) println (car)
在代碼中定義了兩個類:Vehicle和Car。Car繼承了Vehicle。在繼承的時候,因為要向父類傳遞參數,所以Car類主構造函數的一部分必須能匹配父類的構造函數。因為Car類構造函數中的id和year兩個成員變數源自父類Vehicle,所以需要使用override關鍵字修飾。此外,因為這兩個類都重寫了java.lang.Object的toString方法,所以重寫的方法前面需要使用override關鍵字修飾。
看一下執行結果:
就這樣!
###########