Компилятор навязывает, что конкретные классы реализуют все методы тезисов они наследуют от суперкласса и черт.
Если ваш класс компилировался, это означало, что он не был конкретным, то есть был trait
или abstract class
, и вы не можете заставить ни реализовывать абстрактный метод.
Конечно, как только вы попытаетесь получить конкретный экземпляр, компилятор вызовет ошибку, поскольку метод не реализован.
Практический пример в РЕПЛ
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
Является ли класс расширением абстрактного признака? –
да, и я понял это. в конкретном подклассе был контроллер val = new Controller, и, когда это происходит, по какой-то причине вызывающий контроллер в методе trait заканчивает возврат null. Я добавил истинный ответ ниже (но тогда у вас есть новый вопрос, почему он компилируется) –