2013-03-25 1 views
4

나는 자바에 다음과 같은 스칼라 코드를 개발하는 방법을 이해할 수 없다 : B를받는 방법을스칼라 오버로드 된 생성자와 슈퍼

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 클래스를 개발하는 방법을 분명하면서, 나는 얻을 수 없다 . 도와주세요.

P. 나는 자바

에 대한 일반적인 관행입니다 개찰구 웹 페이지에서 파생 된 내 자신의 BaseWebPage을 만들려고 해요

답변

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) { 
} 

있다, AFAIK, 방법은에서 기본 생성자를 우회 없습니다 보조 양식 중 하나, 즉 다음은 작동하지 않습니다.

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

모든 보조 생성자 양식은 기본 보조 양식을 호출해야합니다. language specification (5.3.1 생성자 정의) :

클래스에는 기본 생성자 외에 추가 생성자가있을 수 있습니다. 이 은 def this (ps1) ... (psn) = e 형식의 생성자 정의로 정의됩니다. 그런 정의는 둘러싸는 클래스에 대한 추가 생성자를 소개하며, 형식 매개 변수 목록 ps1, ..., psn에 주어진 매개 변수를 가지며 평가자 이 생성자 표현식 e에 의해 정의됩니다. 각 형식 매개 변수의 범위는 후속 매개 변수 섹션과 생성자 식 e 인 입니다. 생성자 식은 자기 생성자 호출이 (args1) (argsn) 또는 자기 생성자 호출

(강조 내)으로 시작하는 블록 중입니다.

+0

해명 해 주셔서 감사합니다. 구현할 스칼라 방법은 무엇입니까? 그 포인트는 나 자신의 다른 생성자를 호출하는 것이 아니라 수퍼 클래스의 생성자를 호출하는 것입니다. – scorpp

+0

[번호] (http://scala-programming-language.1934581.n4.nabble.com/scala-calling-different-super-constructors-td1994456.html) – OlivierBlanvillain

+0

+1 잘 설명했습니다. – javadba