Подтвердить что ты не робот

Как создать экземпляр, который расширяет класс с помощью конструктора

Введите код:

class A(name:String)
trait E extends A

new E{}  //compile error

Возможно ли такое наследование? Пытался создать val или def в теле анонимного класса, не помогает.

4b9b3361

Ответ 1

Несколько возможных решений:

1) установите значение по умолчанию для name в классе A:

class A(name : String = "name")
trait E extends A
new E {} // {} is obligatory. trait E is abstract and cannot be instantiated`

2) добавить символ E к экземпляру A:

object inst extends A("name") with E
// or:
new A("name") with E

Ответ 2

A принимает аргумент конструктора, поэтому вам необходимо передать его, например.

new A("someName") with E

Ответ 3

Если вы хотите ограничить признак E, который должен быть смешан с классом A, вы можете использовать тип self. Однако это не способ определить переменную как новую E с помощью A (...)

class A(val name: String)

trait E { self: A =>
  def printName() = println(self.name)
}

val e = new A("This is A") with E
e.printName()