那麼我是Scala編程的新手。我碰到一個問題,每個輔助構造函數應該調用Scala中之前定義的構造函數的原因是什麼?爲什麼每個輔助構造函數應該調用之前定義的構造函數之一?
1
A
回答
0
考慮以下兩種情況用Java寫的:
public class Random{
public int a;
public int b;
public Random(int _a, int _b){
this.a = _a;
this.b = _b;
}
public Random(int _a){
this(_a, 0);
}
}
和
public class Random{
public int a;
public int b;
public Random(int _a, int _b){
this.a = _a;
this.b = _b;
}
public Random(int _a){
this.a = _a;
this.b = 0;
}
}
由於這兩種情況下是有效的在Java中,但是第一圖案的設計是不是因爲更好的第二個例子好可維護性
考慮到以下情況:
You want to change the name of either attributes
在第一個示例中,您只需更改一次,即將this.a更改爲this.newname,並且不需要遍歷所有重載的構造函數以更改它。
然而,在第二個例子中,你需要經過所有重載的構造。
由於這種設計的原因,在斯卡拉你必須回叫的若干輔助構造函數的默認構造函數。
0
在Scala中,每個類主構造,該構造必須調用來構造對象。這不像Java,它沒有主要和輔助構造函數的概念,並且所有構造函數都具有相同的優先級。
主要構造是在它宣佈,字段和參數特別成爲類的類中的其他方法,後來甚至被稱爲如果聲明爲public直接訪問可用場。如果主構造函數未被調用,則不能保證這些字段已正確初始化。
所以再執行這一主構造被調用,輔助構造函數必須調用這個主構造,或者只要撥打另一個構造構造函數的調用鏈最終導致主構造。
0
我們有兩種類型的斯卡拉構造函數。 ⅰ)主構造 ⅱ)二次構造
我們可以通過僅主構造實例在階類,儘管我們利用輔助構造聲明的任何對象。由於輔助構造函數是主構造函數的一部分(因爲我們在主構造函數中定義了方法,變量,輔助構造函數),並且每個輔助構造函數都應該調用之前定義的構造函數(輔助函數或主函數),並且此調用最終到達主構造函數。
由此我們可以得出這樣的結論主要構造是主入口點類實例化,這是什麼原因每個輔助構造函數必須和應該調用另一個構造(預定的輔助或主要)。
相關問題
- 1. 爲什麼在調用複製構造函數之前調用構造函數?
- 2. 在父構造函數之前調用子類構造函數
- 3. Scala輔助構造函數
- 4. viewDidLoad在構造函數之前調用
- 5. 基類構造函數在派生類構造函數之前真的調用
- 6. 爲什麼構造函數未定義?
- 7. 爲什麼在包含類的構造函數之前調用靜態成員的構造函數?
- 8. 在父構造函數之前調用child方法在PHP中構造函數
- 9. 爲什麼調用基構造函數?
- 10. flash as3在構造函數之前或之後定義變量?
- 11. NavigateTo()函數在構造函數之前被調用?
- 12. 在構造函數之前調用成員函數
- 13. 從另一個構造函數調用默認構造函數
- 14. 在構造函數中調用另一個構造函數
- 15. 爲什麼在靜態轉換之後調用構造函數?
- 16. Java:通過構造函數調用構造函數,有什麼意義?
- 17. 什麼應該是構造函數屬性值..a原型構造函數或對象構造函數本身
- 18. 爲什麼構造函數不是構造函數?
- 19. 靜態構造函數之前反射
- 20. 構造函數中的調用基構造函數和其他構造函數
- 21. 確定一個構造函數調用其基類的構造
- 22. 爲什麼調用複製構造函數而不是移動構造函數?
- 23. 析構函數布展構造函數之前叫什麼名字?
- 24. 爲什麼默認構造函數和自定義構造函數是爲UINavigaionController的子類調用的?
- 25. 創建輔助窗口時的UWP自定義構造函數
- 26. 構造函數應該指定參數
- 27. 如何讓父類構造函數在子構造函數之前運行? (PHP)
- 28. c#語法幫助構造函數之後會發生什麼?
- 29. 爲什麼在C++中創建複製構造函數之前需要顯式構造函數?
- 30. 未定義QVideoFrame的許多構造函數之一的引用