初始抽象 val 成員
在 抽象成員 中最後一個例子,如果在父類別(特徵)中是抽象 val 成員,在子類別實作時,如果執行順序與你的應用程式行為有關時,需注意一下執行的順序問題。如果是抽象類別的話,可以藉由主要建構式來確保執行的順序:
- abstract class Circle(r: Double) {
- val radius = r
- val area = Math.Pi * radius * radius
- }
- def calRadius = 10.0
- class RedCircle(r: Double) extends Circle(r)
- val c = new RedCircle(calRadius)
- println(c.area) // 314.1592653589793
- abstract class Circle(r: Double) {
- val radius = r
- val area = Math.Pi * radius * radius
- }
- def calRadius = 10.0
- val c = new Circle(calRadius) {
- // 其它實作
- }
- println(c.area) // 314.1592653589793
- trait Circle {
- val radius: Double
- val area = Math.Pi * radius * radius
- }
- def calRadius = 10.0
- class RedCircle(r: Double) extends Circle {
- val radius = r
- }
- val c = new RedCircle(calRadius)
- println(c.area) // 314.1592653589793
- trait Circle {
- val radius: Double
- val area = Math.Pi * radius * radius
- }
- def calRadius = 10.0
- val c = new Circle {
- val radius = calRadius
- }
- println(c.area), // 0.0
- trait Circle {
- val radius: Double
- val area = Math.Pi * radius * radius
- }
- def calRadius = 10.0
- val c = new { val radius = calRadius } with Circle {
- // 其它定義
- }
- println(c.area) // 314.1592653589793
沒有留言:
張貼留言