In einem meiner Interviews wurde ich gebeten, den Unterschied zwischen einem Interface und einer abstrakten Klasse zu erklären.
Hier ist meine Antwort:
Methoden eines Java-Interfaces sind implizit abstrakt und können nicht implementiert werden. Eine Java-abstrakte Klasse kann Instanzmethoden haben, die ein Standardverhalten implementieren.
In einem Java-Interface deklarierte Variablen sind standardmäßig final. Eine abstrakte Klasse kann nicht-finale Variablen enthalten.
Elemente eines Java-Interfaces sind standardmäßig öffentlich. Eine Java-abstrakte Klasse kann die üblichen Arten von Klassenelementen wie private, geschützte usw. haben.
Ein Java-Interface sollte mit dem Schlüsselwort "implements" implementiert werden; Eine Java-abstrakte Klasse sollte mit dem Schlüsselwort "extends" erweitert werden.
Ein Interface kann nur ein anderes Java-Interface erweitern, eine abstrakte Klasse kann eine andere Java-Klasse erweitern und mehrere Java-Interfaces implementieren.
Eine Java-Klasse kann mehrere Interfaces implementieren, aber nur eine abstrakte Klasse erweitern.
Der Interviewer war jedoch nicht zufrieden und sagte mir, dass diese Beschreibung "buchhalterisches Wissen" widerspiegelte.
Er bat mich um eine praktischere Antwort und erklärte, wann ich eine abstrakte Klasse anstelle eines Interfaces wählen würde, unter Verwendung praktischer Beispiele.
Wo habe ich einen Fehler gemacht?