2013-03-25 88 views
4

我無法理解如何開發類似於Java的下Scala代碼:斯卡拉重載的構造函數和超

public abstract class A { 
    protected A() { ... } 
    protected A(int a) { ... } 
} 

public abstract class B { 
    protected B() { super(); } 
    protected B(int a) { super(a); } 
} 

public class C extends B { 
    public C() { super(3); } 
} 

,而它清楚如何開發C級,我不能讓如何接收B 。 請幫助。

P.S.我試圖創建一個從檢票口好康得出我自己BaseWebPage這是Java

一種常見的做法

回答

7

你的意思是這樣的:

abstract class A protected (val slot: Int) { 
    protected def this() = this(0) 
} 

abstract class B protected (value: Int) extends A(value) { 
    protected def this() = this(0) 
} 

class C extends B(3) { 
} 

還有就是,據我所知,沒有辦法繞過從主構造二次形式之一,即,以下將不起作用:

abstract class B protected (value: Int) extends A(value) { 
    protected def this() = super() 
} 

所有二級構造形式必須調用主之一。從language specification(5.3.1構造函數定義):

一個類除了主構造函數外還可以有其他構造函數。這些 由def(ps1)...(psn)= e的構造器定義來定義。 這種定義引入了封閉類的附加構造函數,其中 參數在形式參數列表ps1,...,psn中給出,其評估 由構造函數表達式e定義。每個形式參數的範圍是 後續的參數部分和構造函數表達式e。 構造函數 表達可以是一個自構造函數調用此(args1)...(argsn)或具有自構造函數調用

(重點煤礦)開始一個塊 。

+0

謝謝澄清! 有沒有scala的方式來實現呢?這個觀點不是調用我自己的另一個構造函數,而是來自超類的構造函數。 – scorpp 2013-03-25 21:14:10

+0

[編號](http://scala-programming-language.1934581.n4.nabble.com/scala-calling-different-super-constructors-td1994456.html) – OlivierBlanvillain 2013-12-16 13:06:59

+0

+1做得好的解釋。 – javadba 2014-05-23 17:24:59