Я бы сказал, что вторая инструкция из первой партии:
MyC2_1.relation(MyC1_1); //Calls C1#relation()
Недопустима, а та, которую вы подозреваете как нелегальная, верна.
Это так, потому что C2на больше, чем С1 (у него есть все, что есть у С1, плюс что-то большее), потому что это extends
С1 - так что везде, где вы ожидаете С1, с С2 тоже будет все в порядке.
Между тем, С1 на меньше, чем С2, для «возврата» по вышеуказанной причине, поэтому, когда ожидается С2, С1 будет недостаточно.