С одна черта вы можете сделать это с структурного типа:
trait C {
self: { def aValue: Int
def bValue: Int } =>
def total = aValue + bValue
}
class ABC extends C {
def aValue = 1
def bValue = 1
}
Отражение используется.
Но, во-первых, вы не должны злоупотреблять самонаборами из-за principle of least power.
Метода от вопроса может быть добавлена просто простирающимся другим Тайтом:
trait C extends A with B{
def total = aValue + bValue
}
или введите оба метода в явном виде:
trait C {
def aValue: Int
def bValue: Int
def total = aValue + bValue
}
Где использовать автономный типы?
Самостоятельные типы обычно используются с классами. Это хороший способ для характеристики, чтобы требовать быть подклассом желаемого класса.
Существует также одно хорошее использование самонастройки с триатами: когда вы хотите манипулировать порядком инициализации класса с многоуровневым.