Sie benötigen Abstraktion, wenn Sie eine Klasse haben, die Sie nicht alle ihre Methoden implementieren möchten. Jene Klassen, die es erben, werden gezwungen sein, all diese Methoden zu implementieren, sonst müssten Sie die Unterklassen ebenfalls als abstrakt deklarieren.
Darüber hinaus sollten Sie bewusst sein, Schnittstelle, Methoden der Schnittstelle muss nicht Körper und die gute Sache ist, dass Ihre Klasse so viel wie Schnittstelle implementieren kann, wie Sie möchten. Dagegen können Sie nur eine abstrakte Klasse erben. Schnittstellen sind wie Verträge. Welche Klasse sie auch implementieren, muss Körper für alle ihre Methoden zur Verfügung stellen.
Ob Sie abstrakt oder Schnittstelle oder beides benötigen, hängt wirklich von Ihrem Entwurf ab und was Sie implementieren möchten. Obwohl es eine gute Übung ist, die Klassen, die gemeinsame Methoden haben, zu zwingen, dieselbe Schnittstelle zu implementieren (wenn Sie nichts über den Körper jeder Methode wissen) oder abstrakt (wenn Sie wissen, was der Körper von einigen, allen oder keinen von ihnen ist) die Methoden)
Ein anderes Beispiel wäre, wenn Sie Abstraktion oder Schnittstelle haben, wenn Sie etwas zu ihnen addieren, müssen alle Unterklassen oder Klassen, die sie implementieren, diesen Änderungen folgen, es bedeutet, dass die Dose einfacher zu erhalten wäre.
Sehen Sie sich auch this, this und this und open/close principle an.
Wenn Sie etwas neues bauen, dann sollte die root Schnittstelle sein oder weniger Sie können abstrakte Klasse verwenden. – Prashant