2013-03-27 2 views
0

Я изучаю scala, так что несите меня, если это глупый вопрос. Я экспериментировал с тематическими классами и попробовать следующее: -Ошибка: класс case, реализующий абстрактный метод родителя

case class A { 
    def eval(x: Int): Boolean 
} 

case class B extends A 

case class C extends A { 
    override def eval(x: Int): Boolean = true 
    // Compiler error is - 
    // Multiple markers at this line 
    // - Missing closing brace `}' assumed here 
    // - expected start of definition 
} 

Разве это не возможно для случая классов для реализации абстрактных методов?

+1

Да, конечно, для класса «case» возможно реализовать абстрактный элемент из базового типа. –

ответ

0

abstractcaseclass - это противоречие в терминах. Не рекомендуется распространяться от case class и, делая абзац case class, вы вынуждены подклассифицировать его, чтобы иметь класс, способный к действию.

Общий шаблон является abstract class или trait в качестве основы с одной или более (часто более чем один) case class ES всегда в листьях дерева наследования.

+0

Даже если я делаю класс A небезовым классом, он все равно не компилирует – user855

+0

Ajay - если вы делаете A как абстрактным, но не классом case, это должно компилироваться отлично (хотя с предупреждением, так как вы создали случай класс без аргументов, функциональность которых устарела). – Impredicative

3

Класс case не может наследовать другой класс case (компилятор делает много магии). В scala вы обычно используете черту, поэтому ваш код будет выглядеть так:

trait A { 
    def eval(x: Int): Boolean 
} 

case class C() extends A { 
    override def eval(x: Int): Boolean = true 
} 
Смежные вопросы