私はちょうど私に奇妙ないくつかの状況を偶然見つけました。私は非常によくここに明白な行方不明かもしれない - とにかく、私を助けてください。私はクラス属性「ヴァルS」とクラスXを定義していたスクリプトではScalaコンストラクタの引数は重複していますか?
scala> class X(val s: String) { def run=println("(X): "+s) }
defined class X
scala> class Y(s: String) extends X("MY "+s) { override def run=println("(Y): "+s) }
defined class Y
scala> new Y("fish").run
(Y): fish
:
は以下のScala REPLスクリプトを考えてみましょう。 次に、1つのコンストラクタ引数をとり、それをXに渡すことになっているクラスYを定義します。違いを表示するには、X( "MY" + s)に渡す前に "s"を修正してください。
最後に新しいYを作成して「実行」を呼び出します。これはコンソールに "fish"を表示するので、明らかに、クラス "X"の属性 "s"は、 "Y"で作成した新しい属性 "s"によって隠されています。
スカラ2.8と2.9.1で同じ結果を試しました。
これはこの方法になっていますか?自分のクラスのコンストラクタ引数をスーパークラスに渡し、そのクラスを子クラスの中に自分自身で格納したくない場合はどうすればよいでしょうか?ここでの一般的な練習は何ですか?
ありがとうございます!
詳細な説明ありがとうございます! –
Yのクラスパラメータsは、Xで定義された値をシャドウします。 – mkneissl