Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
388 views
in Technique[技术] by (71.8m points)

polymorphism - Overriding vals in Scala

I have tried to override val in Scala as this:

trait T{
  val str: String
}

sealed abstract class Test extends T{
  val str: String = "str"
}

class Test1 extends Test{
  val str = super.str + "test1" //super may not be used on value str
}

But this refused to compile. Why? I wanted to override value in the abstract class using the abstract class's value itself. How to do this?

In my particular case I cannot pass it as a class parameter.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Scala compiler does not allow to use super on a val. If you are not caring about re-evaluation, you can just use def instead.

trait T{
  def str: String
}

sealed abstract class Test extends T{
  def str: String = "str"
}

class Test1 extends Test{
  def str = super.str + "test1" //super may not be used on value str
}

defined trait T
defined class Test
defined class Test1

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...