假设我有这样的类和对象层次结构:
class A extends BB
class B extends BB
object A extends BB
abstract class BB {
def writer: Writer (<say Writer is a custom class>)
def write: {
writer.<dothing>
}
}
所以写入器必须在类A
和B
中实现,而不是在对象A中实现,这样代码才能正常工作。对,是这样?
new A.write
new B.write
因此,写入器必须在对象A中实现,才能使此代码工作。对,是这样?
A.write
发布于 2018-06-06 06:45:11
特征:无状态,class
或object
都可以扩展trait
。
当某个东西没有任何状态时,您可以将其定义为object
。
scala> trait CanFly {
| def fly: String
| }
defined trait CanFly
scala> class DuckCanFly extends CanFly {
| override def fly: String = "duck duck"
| }
defined class DuckCanFly
scala> object EagleCanFly extends CanFly {
| override def fly: String = "eagle eagle"
| }
defined object EagleCanFly
scala> new DuckCanFly().fly
res0: String = duck duck
scala> EagleCanFly.fly
res1: String = eagle eagle
如果你想让伴生对象像下面这样定义它,你不需要再次扩展特征。
scala> :paste
// Entering paste mode (ctrl-D to finish)
class DuckCanFly extends CanFly {
override def fly: String = "duck duck"
}
object DuckCanFly {
def apply(): DuckCanFly = new DuckCanFly()
}
// Exiting paste mode, now interpreting.
defined class DuckCanFly
defined object DuckCanFly
scala> DuckCanFly().fly
res8: String = duck duck
在您的示例中,您可以将其定义为trait
,因为我看不到任何状态,您可以将定义为object
。
trait BB {
def writer: Writer
def write = writer.write()
}
object A extends BB {
def writer: Writer = new AWriter()
}
object B extends BB {
def writer: Writer = new BWriter()
}
https://stackoverflow.com/questions/50708069
复制相似问题