Есть ли модификатор доступа, который я могу использовать, скрывая абстрактный метод от вызова в производном типе? - PullRequest
0 голосов
/ 07 января 2011

Скажем, у меня есть class1, который происходит от абстрактного class2 Class2 имеет абстрактный метод, который каждый производный класс должен переопределить. В моем дизайне метод будет вызываться только если class1 приведен к class2. Есть ли способ скрыть этот метод, когда он приводится как class1? Для меня это не проблема, если не просто интересно. Если это возможно, это хорошая / плохая идея и почему? Спасибо !!!

Ответы [ 3 ]

1 голос
/ 07 января 2011

Вы можете использовать явную реализацию интерфейса для достижения аналогичного эффекта.Чтобы вызвать явно реализованный метод интерфейса, вам необходимо привести его к интерфейсу.

0 голосов
/ 07 января 2011

Это плохая идея, потому что она идет вразрез с принципом SOLID, особенно с L-частью принципа.Если бы кто-то еще пытался использовать ваш производный класс, зная, что он наследует от базового класса, у которого уже есть метод, он был бы очень озадачен неполной реализацией, тем более что это абстрактный метод.Интерфейс - это путь, как уже было сказано, вы можете определить явную реализацию и эффективно скрыть метод.

0 голосов
/ 07 января 2011

Я серьезно сомневаюсь в этом.Это не то, как наследование должно работать в объектно-ориентированном проектировании.

Если в Class1 нет абстрактного метода Class2, он не должен наследоваться от class2.

Представьте себе пользователя, имеющего коллекциюclass2 и вызов .abstractMethod () для каждого в нем.Позже кто-то добавляет к нему экземпляр Class1.

Ни один из этих программистов не сделал ничего плохого, но код все еще не работает.

Подумайте о добавлении еще одного уровня абстрактности, чтобы этот верхний уровеньабстрактный имеет все свойства class1 и class2, и они оба наследуются от него.Затем Class2 добавляет abstractMethod.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...