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