Как только вы создали объект и присвоили его i с инструкцией.
I i = new C();
Объект еще C, даже если переменная отсылая к ней определяется как И.
SO
C c = (C)i;
просто назначает тот же объект новой переменной, которая определяется как C. И поскольку объект имеет тип C, проблем нет.
j = (J)i;
просто присваивает один и тот же объект новой переменной, которая определена как J. И, как объект имеет тип С, который реализует интерфейс J он также типа J, поэтому нет никаких проблем.
i = (I)null;
Просто устанавливает переменную i в значение null.
Можете ли вы разместить подпись 'C'? –
@JordiCastilla На основании вопроса, я думаю, мы можем смело предположить, что это 'класс C реализует I, J {}'. – Pshemo