Wir haben versucht, Klassen zu definieren. Durch das Definieren einer Klasse wird ein neuer Typ erstellt. Wenn die Klasse vorhanden ist, erstellen wir dann Objekte des entsprechenden Typs. Darüber hinaus sollte jeder Typ auch über eine klare Benutzeroberfläche verfügen, die von den Benutzern verwendet werden kann.
Wir können andere Objekte in der Definition einer neuen Klasse verwenden. Das ist Komposition. Die Kombination ist eines der grundlegenden Mittel, um die Wiederverwendbarkeit von Programmen in Java zu erreichen.
Kombination mit „has-a“
Ein Objekt ist ein Datenelement eines anderen Objekts. Schauen wir uns zum Beispiel das zuvor erwähnte Beispiel einer wiederaufladbaren Taschenlampe an:
Die Batterie, das LED-Licht, der Knopf ... in einer wiederaufladbaren Taschenlampe kann alles ein Gegenstand sein. Wir können eine Batterieklasse definieren, um Batterieobjekte zu definieren und zu generieren. In der Klassendefinition der wiederaufladbaren Taschenlampe kann ein Batterieobjekt als Datenelement verwendet werden, um den Status des Batterieteils darzustellen.
Nachfolgend definieren wir eine Batterieklasse und verwenden „Power“, um deren Leistung darzustellen. Eine Batterie kann geladen (chargeBattery) und verwendet (useBattery) werden. Wir verwenden Objekte vom Typ „Batterie“ als Datenelemente in der folgenden Definition der Torch-Klasse:
Kopieren Sie den Codecode wie folgt:
KlasseBatterie
{
öffentliche NichtigkeitsgebührBatterie (doppeltes p)
{
if (this.power < 1.) {
this.power = this.power + p;
}
}
öffentlicher boolescher Wert useBattery(double p)
{
if (this.power >= p) {
this.power = this.power - p;
return true;
}
anders {
this.power = 0.0;
return false;
}
}
private Doppelleistung = 0,0;
}
classTorch
{
/**
* 10 % Strom pro Stunde Nutzung
* Warnung bei Stromausfall
*/
public void turnOn(int Stunden)
{
boolescher Wert verwendbar;
usable = this.theBattery.useBattery( Stunden*0,1 );
if (usable != true) {
System.out.println("Nicht mehr verwendbar, muss aufgeladen werden!");
}
}
/**
* 20 % Leistung pro Stunde Ladung
*/
Gebühr für öffentliche Nichtigkeit (int Stunden)
{
this.theBattery.chargeBattery( Stunden*0,2 );
}
/**
* Zusammensetzung
*/
private Batterie theBattery = new Battery();
}
Das Neue oben weist Speicher für das Battery-Objekt zu und ist unverzichtbar.
Wir definieren die Batterieklasse. Die Torch-Klasse verwendet ein Objekt vom Typ Batterie (theBattery) als Datenelement. In der Torch-Methode implementieren wir die von der Battery-Klasse bereitgestellte Funktionalität (Funktionalität), indem wir die Schnittstelle des Battery-Objekts manipulieren.
Wir sagen, dass ein Torch-Objekt ein Battery-Objekt hat (hat). Die obige Beziehung kann ausgedrückt werden als:
has-a: Die Taschenlampe hat eine Batterie (beachten Sie die rautenförmige Verbindung oben)
Durch Kombination können wir batteriebezogenen Code wiederverwenden. Wenn wir andere Klassen haben, die Battery verwenden, wie z. B. Mobiltelefone und Taschenrechner, können wir Battery-Objekte darin kombinieren. Dadurch entfällt die Notwendigkeit, für jede Klasse separate verwandte Funktionen zu schreiben.
Wir können eine Testklasse hinzufügen, um den tatsächlichen Effekt zu sehen:
Kopieren Sie den Codecode wie folgt:
Öffentlicher Klassentest
{
public static void main(String[] args)
{
Torch aTorch = new Torch();
System.out.println("Ladezeit: 2 Stunden");
aTorch.charge(2);
System.out.println("Erstes Einschalten: 3 Stunden");
aTorch.turnOn(3);
System.out.println("Zweites Einschalten: 3 Stunden");
aTorch.turnOn(3);
}
}
Das Ergebnis der Ausführung des obigen Programms:
Ladezeit: 2 Stunden
Erstes Einschalten: 3 Stunden
Zweites Einschalten: 3 Stunden
Nicht mehr verwendbar, muss aufgeladen werden!
Wir nutzen die vom Batterieobjekt bereitgestellten Funktionen durch Kombination, z. B. die Erkennung, ob die Batterie leer ist (basierend auf dem Rückgabewert von useBattery ()).
Grundtyp
Von HelloWorld bis objektorientiert nennen wir int, float, double, boolean usw. Grundtypen (primitive Typen), bei denen es sich um spezielle Klassen handelt. Wir können eine Ganzzahl als Objekt vom Typ int verstehen. Der Typ int kann Operationsschnittstellen wie Zuweisung, Addition und Subtraktion haben. Gewöhnliche Typen können als Erweiterungen von Basistypen betrachtet werden. Wir haben primitive Typen als Datenelemente, Methodenparameter, Methodenrückgabewerte und automatische Variablen innerhalb von Methoden gesehen. An diesen Stellen können auch natürliche Objekte vom Typ Common verwendet werden, z. B. Objekte der Klassen Battery und Torch.
In der Sprache C sind die verfügbaren Datentypen (grundsätzlich) voreingestellt, z. B. int und float. In Java können wir zusätzlich zur Verwendung dieser voreingestellten Datentypen die gewünschten Datentypen auch über Klassen anpassen und sie dann über Kombinationen verwenden. Es gibt jedoch Unterschiede zwischen Grundtypen und gewöhnlichen Typen. Grundtypen werden häufig verwendet und belegen aus Gründen der Effizienz in Java andere Speicherverwaltungsmethoden als gewöhnliche Typen (d. h. benutzerdefinierte Klassen). Beispielsweise wird Basistypen nach der Deklaration Speicherplatz zugewiesen, während normale Typen das Schlüsselwort new verwenden müssen, um Speicherplatz zuzuweisen.
Java stellt für jeden Grundtyp entsprechende gemeinsame Typen bereit. Beispielsweise entspricht der int-Basistyp dem Integer-Typ. Wird ein Objekt eines Basistyps in eine entsprechende Common-Type-Variable umgewandelt, wird der sogenannte Basistyp zu einem Typ im allgemeinen Sinne (es gibt keinen Unterschied mehr in der Speicherverwaltung).
Auf diese Weise erhalten wir ein tieferes Verständnis des Java-Konzepts „Alles ist ein Objekt“.
Zusammenfassen
Kombination,hat-a
Grundtyp