Но поскольку он наследованный, он
//! x[1].u();
((MoreUseful)x[1]).u(); // Приведение к дочернему типу RTTI
((MoreUseful)x[0]).u(); // Обработка исключения
} } ///:~
Как и на диаграмме
MoreUseful
расширяет интерфейс
Useful. Но поскольку он наследованный, он так же может быть приведен к базовому типу, к
Useful. Как Вы можете видеть это происходит в момент инициализации массива
x в
main( ). Поскольку оба объекта в массиве есть типы от класса
Useful, то Вы можете послать методы
f( ) и
g( ) обоим, а если Вы попытаетесь вызвать
u( ) (который существует только в
MoreUseful), то Вы получите ошибку времени компиляции.
Если Вы хотите получить доступ к расширенному интерфейсу объекта
MoreUseful, Вы можете попытаться привести его к дочернему типу. Если он правильного типа, то все пройдет нормально. В противном случае, Вы получите
ClassCastException. Вам не нужно писать какой либо специальный код для этого исключения, поскольку оно сигнализирует об ошибке программиста, которая произошла где-то в программе.
У RTTI есть больше применений, чем простое приведение. К примеру, существует возможность увидеть с каким типом Вы работаете, до того, как Вы попытаетесь привести к дочернему типу. Вся глава 12 посвящена изучению различных аспектов применения идентификации типов во время работы в Java
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий