Я хотел бы иметь свойство типа X, расширяющее Y, метод получения должен возвращать Y, а метод установки должен быть закрытым и принимать X.
Возможно ли это с помощью простого определения переменной, или я могунужно использовать веселье?
Рассмотрите возможность использования дополнительного вспомогательного свойства :
class Sample { private var privateX: X var publicY: Y get() = privateX }