Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Eine Pauschalantwort gibt es nicht. Aber wenn man sich aus (guten Gründen) für eine Vererbung entschieden hat, dann sollte einem klar sein, dass man die Klassen nicht auch noch von anderen Quellen erben lassen kann. Wenn man also nicht wirklich Basisfunktionalität braucht, sondern nur die Schnittstelle, dann sollte man Interface verwenden.
Ggf. lässt sich auch beides verwenden, um gegen das Interface zu programmieren, aber dennoch Basisfunktionalität in einer Klassenhierarchie zu haben, die sowohl von der Basisklasse erbt als auch das Interface implementiert.
Naja, Vererbung is denke ich sinnvoll, wenn man ein Oberbegriff hat z.b. Person und dann Unterpersonen wie Arbeitnehmer, Arbeitgeber.
Interface sind denke ich sinnvoll, wenn man zum Beispiel zwischen Schichten eine "Kommunikation" herstellen will und somit gewährleistet, dass bestimmte Methoden auf jeden Fall vorhanden und implementiert sind.
Hallo ein Beispiel wäre vielleicht sowas für Vererbung:
Java:
public class Auto {
public void fahren(){
System.out.println("Brumm");
}
}
public class Audi extends Auto{}
public class VW extends Auto{}
So, bei der Vererbung gibt das Auto das Verhalten "fahren" vor.
Wenn also ein Subobject ein Verhalten vom SuperObject haben soll, dann nimmt man die Vererbung.
Beispiel bei Interfaces:
Java:
public interface Person {
void pipiMachen();
}
public class MaenchlichePerson implements Person{
@Override
public void pipiMachen() {
System.out.println("stehend");
}
}
public class WeiblichePerson implements Person{
@Override
public void pipiMachen() {
System.out.println("sitzend");
}
}
So das Interface Person gibt vor was die Klasse(Object vo Typ Person) implementieren müssen, aber nicht wie sie es machen. Also muss jede Klasse für das Verhalten selber sorgen.
Vielleicht wird es dadurch klarer.
der Aspekt der Kommunikation verschiedener Klassen trifft es eigentlich recht gut.
Unterperson klingt so diskriminierend^^.
Ich habe aktuell ein Projekt, bei dem ich die Personen als Interface nutze.
In meinem Fall geht es um die reinen PersonenDaten, welche gleichrangig für Einlieferer und Kunden behandelt werden.
Es würde sich auch anbieten, das Interface zu nutzen, wenn es Arbeitgeber und Arbeitnehmer wären, solange es nur um die PersonenDaten ginge.
Wenn mans verallgemeinern möchte, dann "Vererbung/Delegation bei Hierachie" und "Interface bei gleichrangiger Behandlung".
Gibts natürlich noch viel mehr Anwendungsmöglichkeiten ist aber vielleicht schon mal ne Entscheidungshilfe für dich.
Ich programmiere sehr gerne gegen Interfaces. Die eigentl. Anwendung bezieht sich dann fast ausschließlich darauf und ich kann einfach Implementierungen austauschen (vor allem, da ich Guice einsetze).
Von Klassen erben zu lassen, macht eben dann Sinn, wenn man bestehenden Implementierungen weiter verwenden will (Redundants vermeiden).
Wo ich keine Interfaces einsetze sind bei (ich nenns mal) Property Holder. Also z.B.:
Java:
public class DBFiel {
private String name;
private boolean isNullAble;
//... usw
public DBField(String name, boolean isNullAble, ...)
public String getName() //...
}
aber pauschalisieren würde ich da jetzt nichts. Das kann sich von Anwendungsfall zu Anwendungsfall zu Programmierers vorlieben immer wieder unterscheiden.
Das ist meiner Meinung nach einer der größten Fehler, die man beim Einsatz von Vererbung machen kann. Vererbung dient nicht zur Code-Wiederverwertung (das kann man über Delegation lösen). Sie muss sich immer an den Prinzipien des objektorientierten Designs halten (is-a-Beziehung).
Naja, hab das ein wenig anderster gemeint. Angenommen man hat eine Klasse Säugetier mit der Methode atmen. Darin wird beschrieben, dass die Lunge dazu verwendet wird. Das (Säugetier) jetzt als Interface zu behandeln wäre imho nicht sinnvoll, da alle Säugetiere afaik das auf die gleiche Art und Weiße machen -> Ergo das kommt in die Klasse Säugetier und gilt so erstmal für alle, die auch eines sind (z.b. Hund).
Von der "is-a-Beziehung" bin ich einfach mal ausgegangen, dass es logisch auch so ist.
Dieses Audi VW Beispiel ist ein typisches Beispiel wie man es meiner Meinung nach nicht machen soll....
Das sind unterschiedliche Ausprägungen der Eigenschaften, wenn sie unterschiedliches Verhalten haben, dann würd ich dieses Verhalten kapseln und über Komposition austauschbar machen....