Komposition
bedeutet einfach, Instanzvariablen zu verwenden, die auf andere Objekte verweisen.
Betrachten Sie dieses sehr einfache Beispiel, um zu veranschaulichen, wie sich die Vererbung im Vergleich zur Komposition in der Abteilung für die Wiederverwendung von Code verhält:
1- Code über Vererbung
class Fruit {
// Return int number of pieces of peel that
// resulted from the peeling activity.
public int peel() {
System.out.println("Peeling is appealing.");
return 1;
}
}
class Apple extends Fruit {
}
class Example1 {
public static void main(String[] args) {
Apple apple = new Apple();
int pieces = apple.peel();
}
}
Wenn Sie das ausführen Example1 application
, wird "Peeling ist ansprechend" ausgedruckt, da Apple die Implementierung von Fruit erbt (wiederverwendet) peel()
. Wenn Sie jedoch zu einem späteren Zeitpunkt den Rückgabewert von peel()
in Peel ändern möchten , wird der Code für gebrochen Example1
. Ihre Änderung an Fruit bricht den Code von Example1, obwohl Example1 Apple direkt verwendet und Fruit niemals explizit erwähnt. Weitere Informationen finden Sie unter So würde das aussehen:
class Peel {
private int peelCount;
public Peel(int peelCount) {
this.peelCount = peelCount;
}
public int getPeelCount() {
return peelCount;
}
//...
}
class Fruit {
// Return a Peel object that
// results from the peeling activity.
public Peel peel() {
System.out.println("Peeling is appealing.");
return new Peel(1);
}
}
// Apple still compiles and works fine
class Apple extends Fruit {
}
// This old implementation of Example1
// is broken and won't compile.
class Example1 {
public static void main(String[] args) {
Apple apple = new Apple();
int pieces = apple.peel();
}
}
2- Code über Komposition Die
Komposition bietet eine alternative Möglichkeit Apple
, die Fruit's
Implementierung von wiederzuverwenden peel()
. Anstatt zu erweitern Fruit
, Apple
kann ein Verweis auf eine Fruit
Instanz gespeichert und eine eigene peel()
Methode definiert werden, die einfach peel()
die Frucht aufruft . Hier ist der Code:
class Fruit {
// Return int number of pieces of peel that
// resulted from the peeling activity.
public int peel() {
System.out.println("Peeling is appealing.");
return 1;
}
}
class Apple {
private Fruit fruit = new Fruit();
public int peel() {
return fruit.peel();
}
}
class Example2 {
public static void main(String[] args) {
Apple apple = new Apple();
int pieces = apple.peel();
}
}
für weitere Informationen ref
Class A
innenClass B
(statt SubklassenClass B
vonClass A
).“ ?