Basisklasse A
hat eine Unterklasse B
, und B
hat eine Unterklasse C
. A
implementiert eine virtuelle Methode doStuff()
, B
nicht, und C
tut. Von C
, ich nennen A
wollen ‚Implementierung s von doStuff()
(Ich tue dies aus C
‘ s Umsetzung von doStuff()
aber das ist nicht wirklich wichtig sollte.) Soll ich anrufen:Aufrufen von identisch benannten Methoden in Basisklassen
A::doStuff();
Oder:
B::doStuff();
Das erste scheint klarer zu sein, weil es sich auf die tatsächliche Implementierung bezieht. Auf der anderen Seite könnte der zweite nützlicher sein, wenn ich später entscheide, dass B
zu doStuff()
anders als A
muss. Welches ist mehr Standard? Was ist gefährlicher?
Ich war ein wenig überrascht, dass B::doStuff()
keine Warnungen ausgelöst haben, aber ich nehme an, dass per Definition B
eine Implementierung hat, auch wenn es von der Basisklasse ist. Kann die Kette von Basisklassen und Implementierungen beliebig lang und kompliziert sein? Zum Beispiel, wenn ich A
bis Z
hätte, jede eine Unterklasse der vorherigen, könnte ich Implementierungen irgendwo in der Kette haben, und ruft die Methode einer Klasse einfach "die Kette hoch", bis sie eine Implementierung findet?
Das sieht wie eine sehr saubere und nützliche Alternative aus. – Luke