2017-08-03 119 views

回答

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

我們有兩種類型的斯卡拉構造函數。 ⅰ)主構造 ⅱ)二次構造

我們可以通過僅主構造實例在階類,儘管我們利用輔助構造聲明的任何對象。由於輔助構造函數是主構造函數的一部分(因爲我們在主構造函數中定義了方法,變量,輔助構造函數),並且每個輔助構造函數都應該調用之前定義的構造函數(輔助函數或主函數),並且此調用最終到達主構造函數。

由此我們可以得出這樣的結論主要構造是主入口點類實例化,這是什麼原因每個輔助構造函數必須和應該調用另一個構造(預定的輔助或主要)。

相關問題