Weder noch:
Von Überladung spricht man, wenn man denselben Funktionsnamen hat, der verschiedene Parameter benötigt.
Überschreiben bedeutet, dass eine untergeordnete Klasse die Methode einer übergeordneten Klasse durch eine eigene Methode ersetzt (dies stellt an sich noch keinen Polymorphismus dar).
Polymorphismus ist eine späte Bindung, d.h. die Methoden der Basisklasse (Elternklasse) werden aufgerufen, aber erst zur Laufzeit weiß die Anwendung, was das eigentliche Objekt ist - es kann eine Unterklasse sein, deren Methoden anders sind. Dies liegt daran, dass jede Unterklasse dort verwendet werden kann, wo eine Basisklasse definiert ist.
In Java sieht man Polymorphismus häufig in der Sammlungsbibliothek:
int countStuff(List stuff) {
return stuff.size();
}
List ist die Basisklasse, der Compiler hat keine Ahnung, ob Sie eine verknüpfte Liste, einen Vektor, ein Array oder eine benutzerdefinierte Listenimplementierung zählen, solange sie sich wie eine List verhält:
List myStuff = new MyTotallyAwesomeList();
int result = countStuff(myStuff);
Wenn Sie überlastet wären, hätten Sie das:
int countStuff(LinkedList stuff) {...}
int countStuff(ArrayList stuff) {...}
int countStuff(MyTotallyAwesomeList stuff) {...}
etc...
und die richtige Version von countStuff() würde vom Compiler ausgewählt werden, um den Parametern zu entsprechen.