Persönlich sehe ich kein Problem mit beiden.
Wie für zusätzliche öffentliche Methoden auf abgeleitete Klassen:
Es gibt nur wenig Nutzen in diesem, in vielen Fällen. Die zusätzlichen Methoden können nicht verwendet werden, wenn die Klasse umgewandelt oder auf einen Verweis auf die Basisklasse gesetzt wurde, was die Nützlichkeit dieser Methode stark einschränkt. Abgesehen davon ist dieser Ansatz nicht besonders falsch. Unterklassen sollen spezifisches Verhalten hinzufügen - manchmal gibt es in einer Klassenhierarchie ein neues Verhalten in einer Unterklasse, das für die Basisklasse nicht geeignet ist. Wenn die Unterklasse häufig alleine verwendet wird, erscheint es durchaus sinnvoll, das zusätzliche Verhalten in den Methoden zu modellieren.
Was Konstruktor Signaturen -
Ich sehe kein Problem mit diesem auch nicht. Unterklassen benötigen oft mehr Informationen, um in einen brauchbaren Zustand versetzt zu werden als die abstrakte Klasse. Davon abgesehen stelle ich normalerweise sicher, dass ich jeden Konstruktor in der Basisklasse implementiere, und füge die neuen Parameter hinzu, die für die Unterklasse erforderlich sind.
Dass gesagt wird:
Es sei denn, es guter Grund ist, dass ich vermeiden würde eine Unterklasse Konstruktor mit weniger Parametern als die Basisklasse mit ... warum sollte ich in der Lage sein, etwas auf einem allgemeineren Fall zu spezifizieren und nicht der spezifische Fall? Ich finde, dass es normalerweise verwirrend ist, wenn Unterklassen völlig andere Konstruktionsoptionen haben als ihre Basisklassen.
* EDIT * FYI, ich beziehe mich auf den Fall, wo Sie ein Objekt aus einer Fabrik konstruieren. Ich argumentiere, dass der aufrufende Code im Fall einer Fabrik wissen sollte, welche Methoden von abgeleiteten Klassen zu erwarten sind. –