Basierend auf einigen Stackoverflow Beitrag:Mehrfachvererbung, Schnittstelle vs Zusammensetzung mit in Java
Java nicht Mehrfachvererbung unterstützen.
Es gibt ein paar Abhilfen ich denken kann:
Die erste ist, Zusammensetzung: eine Klasse machen, die diese beiden Tätigkeiten als Felder nimmt.
Die zweite ist die Verwendung von Schnittstellen. // Das ist meine Frage
Ich versuche, eine Klasse erstellt, die AA-Klasse-Methode und BB-Klasse-Methode über die Schnittstelle oder Zusammensetzung haben kann. Ich lese viel über Vererbung und Komposition, aber meine Frage ist Interface vs Komposition (welches ist besser). Wenn ich diese beiden Klassen Methoden in einer einzigen Klasse Preference verwenden möchten,
class AA{
public int id(){
return 0;
}
}
class BB{
public String name(){
return "0";
}
}
Offensichtlich Java nicht Mehrfachvererbung unterstützen, und wir müssen entweder Schnittstelle oder Zusammensetzung verwenden.
Schnittstelle:
Erste Schnittstellen konstruieren, die zu diesen beiden Klassen entspricht:
interface AAInterface{
public int id();
}
interface BBInterface{
public String name();
}
dann eine Vorzugs Klasse konstruieren, die diese beiden Schnittstellen implementiert und erklärt zwei Klassenobjekte innerhalb dieser Klasse:
class Preference implements AAInterface, BBInterface{
AA aa;
BB bb;
public int id() {
return aa.id();
}
public String name() {
return bb.name();
}
}
Zusammensetzung: Konstruieren Sie direkt eine Klasse mit zwei Feldern, die zwei Klassenobjekten entsprechen, um ihre Methoden zu verwenden.
class Preference{
AA aa;
BB bb;
public int id() {
return aa.id();
}
public String name() {
return bb.name();
}
}
Als Ergebnis in der Präferenzklasse, die von anderen Schnittstelle oder Zusammensetzungsverfahren unter Verwendung der I-ID() Methode verwendet werden kann, und den Namen() Methode, die sich von AA und BB-Klasse-Klasse abgeleitet.
Frage: Warum sollten wir Schnittstelle verwenden, da die Zusammensetzung viel einfacher und besser ist? Gibt es einen Grund, dass wir die Schnittstelle anstelle der Zusammensetzung verwenden sollten? Um es anders auszudrücken, wie man mit einer Java-Schnittstelle zwei Klassenmethoden in einer einzigen Klasse erhält, ist mein Weg der richtige Weg, dies zu tun?
'' 'void someMethod (AAInterface param)' '' <- kann die zusammengesetzte '' 'Preference''' nicht übergeben. –
Sie haben nicht erklärt, was das Endergebnis ist. Wenn Sie beispielsweise eine Präferenz wie eine AA und eine BB behandeln möchten, ist eine Schnittstelle sehr sinnvoll. Wenn Sie das nicht tun müssen, dann tun Sie nicht ... –
Ich möchte diese Methoden in einer einzigen Klasse verwenden, das ist mein Ziel @ JonSkeet – SHE