Простой вопрос по наследованию
DmitriyUK
Дата: 19.05.2006 10:53:37
Как следует описать поле класса чтобы оно не наследовалось дочерними классами?
Goster
Дата: 19.05.2006 11:01:53
Кхм. А можно вопрос: зачем?
Тут два варианта:
1. поле должно быть private. В таком случае оно не будет наследоваться дочерними классами. Тогда другие классы не будут иметь доступа к этому полю.
2. иначе, вы пытаетесь нарушить прицип подстановки Лисков - LSP, который гласит, что наследование должно использоваться только если дочерний класс ЯВЛЯЕТСЯ или РАБОТАЕТ КАК базовый класс. Во всех остальных случаях должно быть использоваться отношение РЕАЛИЗОВАН ПОСРЕДСТВОМ.
DmitriyUK
Дата: 19.05.2006 11:11:20
Да вобщем есть класс, и на его основе надо создать другой, в котором надо к существующим добавить еще одно поле, и три поля родительского класса ну явно лишние. В остальном все точно также.
Типа остается только заново класс описывать или таскать эти ненужные поля? Поля родительского класса сделать Private тоже не получится.
А че такое "РЕАЛИЗОВАН ПОСРЕДСТВОМ"?
Goster
Дата: 19.05.2006 11:15:08
Тогда согласитесь, в вашем случае дочерний объект не может выть использован, как базовый. Т.е. необходимо реализовать отношение "реализован посредством"
Пример:
Здесь класс A релизован посредством класса B.
class A
{
....
private B _bimpl;
}
roger.sys
Дата: 19.05.2006 14:18:00
Конечно не совсем понял, но чтоб всё работало, то есть потомки имели доступ к данным, но из вне к ним нельзя было добраться надо поля объявлять как "protected", и всё будит ОК.
Goster
Дата: 19.05.2006 21:19:20
roger.sys |
Конечно не совсем понял, но чтоб всё работало, то есть потомки имели доступ к данным, но из вне к ним нельзя было добраться надо поля объявлять как "protected", и всё будит ОК. |
Вы, конечно, правы =) , но здесь речь идет не об этом.
Такова жизнь
Дата: 23.05.2006 01:15:00
Valery Shiskin
Дата: 23.05.2006 10:56:29
Вы расчитываете на то, что когда создаете экземпляр дочернего класса, то только он и будет использован. На самом деле, загружая этот класс, .net, как впрочем и java загрузит и родителя. Так, что Вам никак не сдыхаться от "лишних" полей родительского класса.
Worobjoff
Дата: 23.05.2006 11:22:35
Вам надо не выводить один класс из другого а создать третий - базовый для этих двух.