Die Alternative wäre gewesen, die Methode abstract zu deklarieren, aber dann muss jede abgeleitete Klasse sie implementieren. So kann jede Ableitung selbst entscheiden, ob sie das tut oder eben nicht.
Ich bin ja immer dafür, in einer Klasse (auch in einer Basisklasse) nur das zu deklarieren, was auch Sinn macht.
Wenn in der Basisklasse eine Methode keinen Sinn macht, sondern nur in einer speziellen geerbten Klasse, dann würde ich es in der Basisklasse einfach gar nicht deklarieren.
Das wäre so, als wenn ich in einer Klasse TKraftfahrzeug die Methode "Schwimmen" anbiete, obwohl das nur in der Klasse TAmphibienfahrzeug Sinn macht. Alle Kraftfahrzeuge haben jetzt die Methode Schwimmen, doch bei den meisten funktioniert diese eben nicht... Irgendwer kommt dann auf die Idee, mit einem TMotorrad in einen See zu fahren, weil es ja die Methode Schwimmen besitzt. (übertriebenes Beispiel
)
Man könnte sogar so weit gehen, und noch eine zweite Klasse dazwischen hängen, falls es SetCapacity in mehreren Nachfahren geben soll...
TStrings > TGrowStrings > TStringList, TOtherStrings,...
Ob es da irgendeine Eigenheit bei ObjectPascal gibt, damit das keinen Sinn machen könnte, weiß ich nicht, aber in strengen
OOP-Sprachen würde ich das so machen...