Первоначально у меня возникла проблема с дизайном, когда мне понадобилось пять подклассов суперкласса, где все, кроме двух, использовали бы один и тот же общий метод выполнения вещей, а для других двух классов потребуется специальная обработка. Я хотел бы избежать написания метода пять раз; два особых случая и три идентичных.Как вызвать переопределенные методы в подклассе? Потенциальный кандидат на рефакторинг
Таким образом, у каждого класса наследовал SuperClass и его метод doSomething() и переопределил SubClassSpecial1 и SubClassSpecial2 с помощью собственного метода doSomeThing.
Это все было хорошо, пока я не написал метод, который смотрел что-то вроде
void fooBar(SuperClass obj) {
obj.doSomething()
}
и это можно назвать, как fooBar(new SubClassSpecial1());
Проблема в том, что класс выполнения переменной obj
теперь, что из его суперкласс, и, следовательно, он будет вызывать методы, определенные в суперклассе. Я мог бы, конечно, сделать абстрактный метод doSometing() в суперклассе и сделать каждый подкласс реализацией своей собственной версии, но это будет дублировать код в трех классах. И я хочу, чтобы не делать этого ...
Я бы терять усиление полиморфизма дает, если у меня было много разветвлений через
if(obj.getClass().getName() == "SubClassSpecial1") ((SubClassSpecial1) obj).doSomething()K;
else if ...
Так что я должен сделать для того, чтобы сделать дизайн более элегантным и уны-хак?
В этой статье следует по крайней мере указать те языки программирования, которые вы кодируете. –
исправлено. добавлен тег java. Благодарю. но я думал, что это общая проблема дизайна, которая выходит за рамки языковых барьеров. – oligofren
Можете ли вы дать нам рамки ваших определений классов? –