Die breitere Sichtweise auf Komposition und Vererbung suchen ist, die Zusammensetzung ist eine Design-Technik has-a
Beziehung zu implementieren, während Vererbung ist eine Technik is-a
Beziehung zu implementieren. Gehen wir in die Objektorientierungsperspektive, um dies besser zu verstehen.
Wenn ich sage, Dog
ist einMammal
und Snake
ist einReptile
aber beide sind Animals
, Das Design wie sein kann, sollte es eine Superklasse namens genannt Animal
und zwei Kind Klassen Mammal
und Reptile
die Dog
und Snake
sollte erweitert werden. Der entsprechende Code lautet wie folgt:
public abstract class Animal {
public abstract void move();
public abstract void sleep();
public abstract void reproduce();
}
Jedes Tier kann diese drei Aktionen ausführen.
public abstract class Mammal extends Animal{
@Override
public void reproduce(){
System.out.println("Gives birth!!");
}
}
public abstract class Reptile extends Animal{
@Override
public void reproduce(){
System.out.println("Lays Eggs!!");
}
}
Alle Säugetiere/Reptilien werden diese definierte Funktion in üblicher Weise ausführen.
public class Dog extends Mammal{
@Override
public void move() {
System.out.println("Uses it's limbs");
}
@Override
public void sleep() {
System.out.println("Sleeps on it's tummy");
}
}
public class Snake extends Reptile{
@Override
public void move() {
System.out.println("Crawls");
}
@Override
public void sleep() {
System.out.println("");
}
}
Wie Sie in diesem Beispiel beobachten, Dog
erstreckt Mammal
und Snake
Reptile
erstreckt. Daher zu einem bestimmten Zeitpunkt, Dog
wird immer ein Mammal
und ein Snake
immer sein ein Reptile
. Daher ist diese ist eine Beziehung baut eine starke Bindung zwischen zwei Einheiten. Während der Ausführung, solange Dog
Mammal
erstreckt, kann es kein Reptile
oder etwas anderes sein.
Während zurück zu kommen hat-eine Beziehung (Zusammensetzung), kann ich sagen, dass ein Person
hat-aCar
. Ich gebe nicht den Typ der Car
dieser Person an. Lass uns zur OO-Perspektive zurückkehren, um das besser zu verstehen.
Betrachten Sie diese Person
Klasse
public class Person {
private String name;
private String address;
private Car car;
public Person(String name, String address, Car car) {
super();
this.name = name;
this.address = address;
this.car = car;
}
}
Es hier gesehen werden kann, dass ein Person
hat-ein Name, Anschrift und Auto. Der Code für Auto und verwandte Klassen geht unter:
public class Car {
//Car related methods
}
public class Ferrari extends Car{
//Ferrari specific methods, attributes
}
public class Bmw extends Car{
//BMW specific attributes, methods.
}
Es ist ersichtlich, dass BMW
und Ferrari
sind Arten von Car
. Jetzt zurück zu der Aussage "Person hat-ein Auto", das Auto könnte jedes Auto sein. Es könnte ein Ferrari oder BMW oder irgendetwas anderes sein. Dies kann bei der Erstellung von Person
Objekt übergeben werden.
Person john = new Person("John", "#81, 2nd Street,..", new Ferrari());
Es ist ersichtlich, dass John in einem Ferrari
Car
nimmt. Hier kann John jede Art von Car
annehmen, die während der Objekterstellung (dynamische Natur) übergeben wird. Daher wird dieses Maß an Flexibilität durch has-a (Zusammensetzung) Beziehung zur Verfügung gestellt.
Ich hoffe, dass dies Ihre Zweifel löscht.
Mitgliederobjekte sind über Referenzfelder verfügbar, und wenn sie veränderbar sind, können Sie sie mit einer Zuweisung ändern, d. H. '=' –
Können Sie bitte ein Codebeispiel angeben –
Warum der Downvote? –