То, что вы говорите, что хотите сделать, называется шаблоном прототипа в OOP, и, насколько я могу судить, он не поддерживается из коробки в Scala (и, я думаю, где-нибудь еще).
Есть также несколько проблем:
propertyCommon
не настроен с помощью конструктора, поэтому каждая реализация, которая должна его установить, скорее всего, должна будет override
использовать анонимный класс (но тогда это свойство не будет частью equals, hashcode, toString, деривации и т.д. c) Event
не определяет какой-либо интерфейс, который позволил бы его обновить
Самый простой (и самый безопасный) способ реализовать нужную вам функциональность был бы примерно так:
trait Event {
val propertyCommon: String // will be set by implementing class
def clone(propertyCommon: String = this.propertyCommon): Event
}
// children define propertyCommon to match the interface
case class EventA(propertyA: String, propertyCommon: String = "") extends Event {
def clone(propertyCommon: String = this.propertyCommon): EventA = copy(propertyCommon)
}
case class EventB(propertyB: String, propertyCommon: String = "") extends Event {
def clone(propertyCommon: String = this.propertyCommon): EventB = copy(propertyCommon)
}
Однако, возможно, если бы мы знали больше о вашей проблеме, мы могли бы предоставить некоторые другое, более простое решение.