1. val num: Number = 256 if (num is Int) {}
2. val num: Number = 256 if (num is String) {}
3. val num: Number = 256 if (num равно Activity) {}
Первый случай может быть хорошо скомпилирован. Но во втором случае нельзя скомпилировать причину «несовместимых типов: String и Number». Поэтому я подумал, что суперкласс слева, а класс справа - потому что класс Int расширяет класс Number. Но третий случай может быть скомпилирован. (Активность Android Android активность)
Как это может быть? На Kotlin .org он говорит просто: «Оператор is проверяет, является ли выражение экземпляром типа. Если неизменяемая локальная переменная или свойство проверяется для определенного типа c, нет необходимости явно приводить его»