2016-03-26 7 views
0

あるクラスを別のクラスから継承する構文を理解しようとしていますが、子を作成するときに親のコンストラクタパラメータを宣言する必要がありますか?スカラーの親クラスからコンストラクタを継承する

なぜこのコードはコンパイルされませんか?

しかし、これは

class Animal(name:String) 
    class Dog(name:String) extends Animal(name) 

を行いますが、私は明示的にextends Animal(name)だけでなくextends Animalを言わなければならないし、コンストラクタが暗示され、その理由は?

答えて

3

スカラ言語仕様では理由は議論されていませんが、暗黙のコンストラクタを提供することは特別なケースであり、間違いなく明らかではありません。だから、現在の動作が均一かつ明示的な方法でさまざまなパターンを収容し

class Animal(name:String) 
class Dog extends Animal("Dog") 

class Animal(name:String) 
class Dog(n1: String, n2: String) extends Animal(n1 + n2) 

:あなたのようなことを行うことができます

注意。

0

のは、あなたがAnimalための2つのコンストラクタがあるとしましょう:あなたはclass Dog(name:String) extends Animalを使用することを期待するそれらの

class Animal(name:String) { 
    def this() = this("unnamed") 
} 

関連する問題