在scala中(或者,或许,一般情况下)是否可以使用后面强制进入更抽象方法的具体实现?例如
trait Tree {
def print(s:String) = println(s)
}
trait Leaf extends Tree {
def print(s:String) // force use of this to be defined later. Maybe I need the word override?
}
这个人为的例子展示了我以前从未真正考虑过的事情,即开始具体但扩展抽象。实际上,我构建了一个类似树的类结构,可以处理大多数具体代码,直到它遇到各种叶类,此时我不想忘记覆盖。
答案 0 :(得分:0)
你不能"未实现"一个方法。使用您的示例,可以定义
class Foo extends Leaf
没有任何抱怨编译器,这意味着从您的Tree特征派生的所有类都将已经实现print
方法。
您可以提供默认实施,但仍然要确保您不会通过使用两个特征在任何地方使用它
trait Tree {
def method() // abstract method
}
trait DefaultImpl {
def method() = {
// default implementation
}
}
// now you can do things like
class Foo extends Tree with DefaultImpl // this will use the default implementation
class Bar extends Tree // this will not compile until you provide an implementation for method