Я читал эту статью, и там говорится, что:
Если у нас есть два экземпляра класса Student, загруженных этими CustomClassLoaders, скажем student1 и student2, тогда student1 и student2не совместимы по типу.Другими словами,
Студент ученик3 = (Студент) ученик2;
вызовет исключение ClassCastException, потому что JVM видит эти два как отдельные, различные типы классов, так как они определяются различными экземплярами ClassLoader.
Теперь я понимаю, что он хочет передать: то есть, если мы загрузим один и тот же класс с помощью двух разных загрузчиков классов, тогда они не будут совместимы по типу. Так что пока все хорошо.
Но пример, который он использовал, сбивает меня с толку, то есть
Student student3 = (Student) student2;
Разве это не так, когда мы объявляем ссылочную переменнуюкак Student student , все, что ищет компилятор, - это то, что этот Studnet присутствует в его правильном расположении в соответствии с его структурой пакета. Теперь, когда во время выполнения мыприсвоить эту ссылочную переменную реальному загруженному классу, действительно ли имеет значение, какой загрузчик классов мы используем для загрузки указанного класса? Я сомневаюсь, потому что, насколько я понимаю, загрузчик классов вступает в игру только тогда, когда мы делаем 'new' или мы вызываемстатическое поле на нем, а не когда мы просто объявляем его тип.
Пожалуйста, разъясните мне это и помогите мне исправить мое понимание в этом отношении.
Спасибо, Мавия