Я знаю концепцию полиморфизма и могу понять эту идею, но я все же нашел ответ на вопрос, почему и в Java, и в C# компилятор позволяет вам преобразовать некоторый класс в интерфейс, хотя этот класс вообще не реализует интерфейс.
class MyStupidClass{
}
interface Ix {
void doSomehting();
}
//inside some method:
Ix a = (Ix)new MyStupidClass();//compiled and will throw runtime error.
Во время выполнения произойдет сбой. И в Java, и в C#.
Я могу понять концепцию понижающего приведения, согласно которой дочерний элемент иногда может быть типом родительского, но не это приведение интерфейса.
Изменить – добавить пример понижающего приведения:
class A{
}
class A2 extends A{
}
class A1 extends A{
}
//at some method:
//A a2 = (A)new MyStupidClass();//won't compiled
A a3 = new A2();
A1 a4 = (A1)a3;//can make sense because sometimes it will be A1.
Подробнее здесь: https://stackoverflow.com/questions/786 ... explicitly