У меня есть следующий абстрактный класс и два его подкласса:
abstract class BoundedNumber(val lowerBound: Double,
val upperBound: Double,
val value: Double) {
require(value >= lowerBound && value <= upperBound)
}
final case class Percentage(override val value: Double)
extends BoundedNumber(0, 100, value)
final case class Probability(override val value: Double)
extends BoundedNumber(0, 1, value)
Можно ли как-то реализовать "общее" дополнение в BoundedNumber
, даже если оно абстрактное и не может быть создано?
abstract class BoundedNumber(val lowerBound: Double,
val upperBound: Double,
val value: Double) {
def +(that: BoundedNumber): BoundedNumber = {
require(this.getClass == that.getClass)
// This of course won't compile:
new BoundedNumber(lowerBound, upperBound, value + that.value)
}
}
Или я обязан (каламбур) реализовать добавление в обоих подклассах, дублируя код?