Показать сообщение отдельно
Старый 07.01.2009, 19:44   #1
Serg_Bloim
AnyKey`щик
 
Регистрация: 30.11.2008
Сообщений: 18
Написано одно полезное сообщение
Наследование

Дано:
три класса, один (ClassP) - корневой, два(ClassCh1 и ClassCh2) - наследуемые от первого.
создаю в мидлете массив типа ClassP с элементами классов всех трех обьяленных типов.
ClassP[] Elems = {new ClassP(), new ClassCh1(), new ClassCh2()};
тоесть в массиве типа ClassP создаются также елементы наследуемых классов ClassCh1 и ClassCh2.
Как и предпологалось(даже не знаю, почему я подумал, что это сработает) эта конструкция хорошо живет без сбоев. Без проблем можно обращаться к членам-данным и членам-функциям классов, но только тем, которые обьявлены еще в родительском классе, тоесть в ClassP.
1)Вопрос вот в чем: почему это работает и нет ли тут какой-то незаметной ошибки? Ведь я создаю массив для элементов типа ClassP, а помещаю туда также его наследников, которые, скорее всего, занимают больше памяти.
2)Что происходит если удалить такой масив, точнее если сборщик мусора его удалит, то он не оставит неочищенными куски памяти, которые ушли под новые члены-данные и члены-функции наследуемых классов?
3)Может надо в деструкторе самому удалять свои, невходящие в род.класс обьекты в классе-потомке или это лишнее?
(Offline)
 
Ответить с цитированием