Создание объекта-компаньона с помощью фабричного метода. Метод фабрики вычисляет аргументы для передачи их конструктору суперкласса. Но, конечно, это не происходит напрямую - не может. Вместо этого он вызывает ваш основной конструктор, который вы можете сделать приватным, например:
class C private (private val superclassArg: ArgType) extends Super(superclassArg) { ... }
К сожалению, это решение не очень композиционно, потому что оно не позволяет вам наследовать от C. Если сделать конструктор C общедоступным, это все равно потребует дублирования кода, и вы можете забыть предварительно обработать аргумент конструктора. Я полагаю, это зависит от того, считаете ли вы, что для подклассов C всегда необходимо предварительно обработать аргумент таким образом.