Полиморфизм относится к способности языка одинаково обрабатывать различные объекты с помощью единого интерфейса; как таковой он связан с переопределением, поэтому интерфейс (или базовый класс) является полиморфным, а разработчик - это объект, который переопределяет (две грани одной медали)
в любом случае, разница между этими двумя терминами лучше объясняется с помощью других языков, таких как c ++: полиморфный объект в c ++ ведет себя как аналог java, если базовая функция виртуальная, но если метод не виртуальный, переход кода разрешено статически , а истинный тип не проверен во время выполнения, поэтому полиморфизм включает способность объекта вести себя по-разному в зависимости от интерфейса, используемого для доступа к нему; позвольте мне привести пример в псевдокоде:
class animal {
public void makeRumor(){
print("thump");
}
}
class dog extends animal {
public void makeRumor(){
print("woff");
}
}
animal a = new dog();
dog b = new dog();
a.makeRumor() -> prints thump
b.makeRumor() -> prints woff
(предположим, что makeRumor НЕ является виртуальным)
java на самом деле не предлагает этот уровень полиморфизма (называемый также разрезанием объектов).
животное a = новая собака ();
собака б = новая собака ();
a.makeRumor() -> prints thump
b.makeRumor() -> prints woff
в обоих случаях печатается только woff.
так как А и В относятся к классу собаки