Массив объектов разных типов
Часто возникает необходимость хранить в одном массиве объекты разных типов.
Пример:
Сформировать массив сотрудников факультета: студенты и препо- даватели. Класс Студент аналогичен рассмотренному. Класс Преподава- тель имеет поля: фамилия, название кафедры. Метод – вывод фамилии и названия кафедры.
Проблема:
1. Требуется массив объектов разных типов
2. Разрешается массив объектов одного типа
Решение проблемы:
Все классы (типы) являются наследниками класса Object. Объект этого класса представляет собой ссылку, которой может быть присвоена ссылка любого типа.
Object ob;
Студент ст; Преподаватель пр;
…
ob = ст; ob = пр;
Таким образом, массив должен формироваться как массив типа Object (или массив ArrayList, который по определению содержит ссылки типа Object).
Проблема: при извлечении элементов из такого массива необходимо выполнить обратное преобразование. Преобразование выполняется в явном виде.
Студент
Object Þ
Object ob;
Студент ст;
Преподаватель
Преподаватель пр;
…
ob = пр;
пр = (Преподаватель) ob;
Порядок заполнения элементов массива в общем случае неизвестен, поэтому возникает проблема определения типа объекта, на который указывает сслыка.
Операция проверки возможности преобразования ссылки к целевому типу:
ссылка is Тип
true (возможно) false (невозможно)
ob is Преподаватель Þ true ob is Студент Þ false
Другой способ:
Воспользоваться методом объекта GetType(). Свойство Name – имя в виде строки символов:
ob. GetType().Name Þ «Преподаватель»
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.