Außerdem würde ich den geerbten Destruktor doch am Ende deines Destruktor mittels inherited
aufrufen, nicht am Anfang?
Solange du auf keine Eigenschaften der Elternklasse zugreifst, ist das ja egal. Wichtig ist es nur, wenn du z.B. auf ein Objekt einer Elternklasse zugreifst, das im Destruktor dann natürlich zerstört wird, wenn du ihn vor deinem Code aufrufst.
Insofern macht es Sinn den geerbten Destruktor immer nach dem eigenen Code aufzurufen um da keinen Fehler zu machen, aber ein allgemeines Muss ist es nicht. Die Zerstörung des Objekts an sich passiert erst nach dem eigenen Destruktor.
Nebenbei noch als Erklärung:
overload fügt eine weitere Methode mit dem selben Namen hinzu, die dann andere Parameter haben kann als andere in der selben Klasse, override hingegen überschreibt die ursprüngliche Methode, so dass deine statt dieser aufgerufen wird.