Das nächste, was sich ein Anfänger fragt, nachdem er verstanden hat, wie eine Schnittstelle und eine abstrakte Klasse aussehen __ Wie sollte jeder richtig verwendet werden? __ __ Ich denke das ist der Fall.
Kurz gesagt, das war's.
Implementieren Sie eine Schnittstelle für Klassen, die mit Polymorphismus aufgerufen werden sollen.
Der Benutzer sollte keine Variablen vom abstrakten Klassentyp deklarieren. Deklarieren wir Variablen mit dem Schnittstellentyp.
AbstractFooBar = new FooBar(); // NG
IFooBar = new FooBar(); // OK
Sie sollten auch keine Methoden definieren, die abstrakte Klassen als formale Argumenttypen verwenden. Geben Sie den Schnittstellentyp an.
void fooMethod(AbstractFooBar fooBar); // NG
void fooMethod(IFooBar fooBar); // OK
Was ist, wenn Sie Polymorphismus für die untergeordneten Klassen einer abstrakten Klasse verwenden möchten? Weil sich die Frage zu stellen scheint. In diesem Fall sieht es wie folgt aus.
Auf diese Weise sollte der Benutzer immer über die IFooBar-Schnittstelle anrufen und Für diejenigen, die die IFooBar-Schnittstelle implementieren, Sie können AbstractFooBar erweitern oder IFooBar direkt implementieren. Jeder wird glücklich sein.
Recommended Posts