Ваш вопрос не очень понятен, но, похоже, вы в основном после перегрузки время выполнения , которой просто нет в Java.Перегрузки полностью устраняются во время компиляции.Один из вариантов такой:
public void print(SuperClass superClass) {
if (superClass instanceof SubClass) {]
print((SubClass) superClass);
return;
}
System.out.println("AppSuperClass:superclass is parameter");
}
Обратите внимание, что вам нужно сделать это и в переопределении, или иметь метод шаблона, который делает это, и отдельный метод printImpl(SuperClass)
, который можно переопределить вподкласс.
Чтобы довести это до логического предела, вы можете иметь:
class AppSuperClass {
public final void print(SuperClass superClass) {
if (superClass is SubClass) {
printImpl((SubClass) superClass);
} else {
printImpl(superClass);
}
}
protected void printImpl(SuperClass superClass) {
...
}
protected void printImpl(SubClass subClass) {
...
}
}
AppSubClass
будет тогда переопределять только printImpl
(одна или обе перегрузки).
РЕДАКТИРОВАТЬ: Как отмечено в комментариях, альтернативой является использование Шаблон посетителя .Это не тот шаблон, который мне безумно нравится, но , если , вы можете изменить SuperClass
и SubClass
, чтобы узнать о AppSuperClass
(или интерфейсе, который он реализует), он может работать для вас.