编译器强制具体类实现它们从超类和特征继承的所有抽象方法。
如果您的类正在编译,则意味着它不是具体的,即它是 atrait
或 an abstract class
,并且您不能强制两者都实现抽象方法。
当然,一旦您尝试获取具体实例,编译器将引发错误,因为该方法未实现。
REPL 中的实际示例
scala> trait A { def controller: AnyRef }
defined trait A
scala> trait B extends A
defined trait B
scala> abstract class C extends A
defined class C
scala> class D extends A
<console>:8: error: class D needs to be abstract, since method controller in trait A of type => AnyRef is not defined
class D extends A
scala> new B { }
<console>:10: error: object creation impossible, since method controller in trait A of type => AnyRef is not defined
new B { }
^
scala> new C
<console>:10: error: class C is abstract; cannot be instantiated
new C