2016-09-27 4 views
0

Я создал этот небольшой пример Scala для понимания лучших черт.Как себя ведут Скала?

trait Writer { 
    def write(value: Int): Unit = { 
    print("Writer") 
    } 
} 

trait Hdd extends Writer { 
    override def write(value: Int): Unit = { 
    print("Hdd") 
    } 
} 

trait File extends Writer { 
    override def write(value: Int): Unit = { 
    print("File") 
    } 
} 

class TestClass extends App { 
    (1) val myWriter = new Writer with Hdd // This line looks fine 
    (2) val myNewWriter = new Writer   // This line fail 
} 

В моем понимании, это не представляется возможным создать экземпляр Черта, и по этой причине линия (2) не удается.

Но почему-то, что я не могу понять, линия (1) выглядит нормально.

Как это возможно?

ответ

6

Да, вы правы, что черта не может быть реализован в Scala.A признак не может быть реализован , только смешанный. Вам нужен класс для создания экземпляра, и когда вы используете «новый писатель с Hdd», он создает анонимный класс, поэтому ваш экземпляр выглядит отлично и не дает никакой ошибки. И вы получаете ошибку для 2-й строки, поскольку она просто Таким образом, черта не может быть создана.

+0

Отлично. Спасибо за вашу помощь –

1

Try:

val myWriter = new Writer {} 

Я предполагаю, что это нуждается в реализации, даже если реализация пуст

+0

Когда вы добавляете {}, он создает анонимный класс. Работает экземпляр Hence. – Sakalya

Смежные вопросы