Оператор as и ClassCastException

Как я могу «разбить наследование» в Котлине через оператора. Например введите описание изображения здесь

Могу ли я получить ClassCastException, когда он работает, в то же время он должен быть скомпилирован правильно

    Оба (Animal) -> Unit и (Cat) -> Unit Типы устройств представлены одним и тем же классом Function1<P1, R> . Отбрасывание одного в другое никогда не приведет к ClassCastException поскольку они одинаковы во время выполнения.

    Я использовал небезопасный бросок для этого (оператор as ). есть хороший пример: java.lang.Integer не может быть добавлен в java.lang.Long в Kotlin (когда начальное значение равно null)

     package task open class Animal { } class Cat : Animal() { } fun main(args: Array<String>) { var compare1: (Animal) -> Unit = {x: Animal -> println("Animal")} var compare2: (Cat) -> Unit = {x: Cat -> println("Cat")} var animal = Animal() var cat = Cat() compare1(animal) compare2(cat) val compare3 = compare2 as (Animal) -> Unit //ClassCastException will be thrown compare3(animal) }