Um den vorherigen Inhalt zusammenzufassen: Objekt bezieht sich auf eine bestimmte Sache und Klasse bezieht sich auf den Objekttyp. Objekte können Zustände und Aktionen haben, also Datenelemente und Methoden.
Bisher standen Datenelemente und Methoden sowohl internen als auch externen Benutzern offen. Innerhalb des Objekts rufen wir damit die Datenelemente und Methoden des Objekts auf. Außerhalb des Objekts, beispielsweise wenn wir das Objekt in einer anderen Klasse aufrufen, können wir object.data-Mitglieder und object.method() verwenden, um die Datenmitglieder und Methoden des Objekts aufzurufen.
Wir werden die Mitglieder des Objekts kapseln (Mitglieder umfassen Datenmitglieder und Methoden), sodass nur einige Mitglieder von außen aufgerufen werden können. Mithilfe der Kapselung können wir die Benutzerfreundlichkeit und Sicherheit von Objekten verbessern.
Kapselung und Schnittstelle
Kapselung ist ein gebräuchlicher Begriff für Computer, der bedeutet, dass eine begrenzte externe Schnittstelle erhalten bleibt und bestimmte Implementierungsdetails verborgen bleiben. In der Linux-Architektur können Sie beispielsweise erkennen, dass das Linux-Betriebssystem die spezifischen Details der zugrunde liegenden Hardware kapselt und nur die Systemaufrufschnittstelle beibehält. Der Benutzer befindet sich außerhalb des Pakets und kann die erforderlichen Vorgänge nur über die Schnittstelle ausführen.
Einkapselung kommt im Leben sehr häufig vor. Hier ist zum Beispiel eine wiederaufladbare Taschenlampe:
Auch ohne das Handbuch zu lesen, kann ein Benutzer die Funktionsweise dieser Taschenlampe erraten: Schalten und Laden. Diese Taschenlampe verwendet ein Kunststoffgehäuse, um die internen Details zu verbergen, die Benutzer nicht berühren müssen, sodass nur zwei Schnittstellen übrig bleiben, der Schalter und der Netzstecker. Mithilfe dieser beiden Schnittstellen können Benutzer die Funktionen nutzen, die das Produkt erreichen soll. Wenn dem Benutzer alle Details gleichzeitig angezeigt werden, wird er sich von dem Produkt überwältigt fühlen (wie z. B. der ungeschälten Fernbedienung unten). Daher verbessert die Kapselung die Benutzerfreundlichkeit des Produkts.
Wenn das Produkt nicht verpackt ist, sind viele Details der Taschenlampe oder Fernbedienung für den Benutzer sichtbar: Batterie, Schaltkreis, versiegeltes Gummi usw. Dadurch können Benutzer das Produkt jedoch freier bedienen, z. B. den Akku direkt entladen, ein LED-Licht herausnehmen usw. Allerdings tragen Anwender oft ein höheres Risiko, das Produkt zu beschädigen. Daher verbessert die Kapselung die Sicherheit des Produkts.
Ein Java-Softwareprodukt ist dasselbe wie ein Alltagsprodukt. Ein Objekt kann viele Mitglieder (Datenmitglieder und Methoden) enthalten. Einige Datenelemente und Methoden werden nur intern verwendet. Zu diesem Zeitpunkt hoffen wir, einen Mechanismus zum „Packen“ des Objekts zu haben, um das Objekt zu kapseln. Auf diese Weise können Benutzer externe Schnittstellen einfacher erlernen und nutzen, ohne interne Mitglieder kontaktieren zu müssen.
Kapselung von Objektmitgliedern
Java verwendet drei Schlüsselwörter, um die externe Sichtbarkeit von Mitgliedern eines Objekts zu steuern: public, private, protected.
1.öffentlich: Das Mitglied ist von außen sichtbar, dh das Mitglied ist Teil der Schnittstelle
2.privat: Dieses Mitglied ist nach außen nicht sichtbar und kann nur intern verwendet werden und ist von außen nicht zugänglich.
(geschützt beinhaltet das Konzept der Vererbung, das später besprochen wird)
Fassen wir zunächst die zuvor definierte Human-Klasse zusammen:
Kopieren Sie den Codecode wie folgt:
Öffentlicher Klassentest
{
public static void main(String[] args)
{
Human aPerson = new Human(160);
System.out.println(aPerson.getHeight());
aPerson.growHeight(170);
System.out.println(aPerson.getHeight());
aPerson.repeatBreath(100);
}
}
KlasseMensch
{
/**
* Konstruktor
*/
öffentlich Mensch(int h)
{
this.height = h;
System.out.println("Ich bin geboren");
}
/**
*Accessor
*/
public int getHeight()
{
return this.height;
}
/**
* Mutator
*/
öffentliche Leere wachsenHöhe(int h)
{
this.height = this.height + h;
}
/**
* gekapselt, für den internen Gebrauch
*/
privater leerer Atem()
{
System.out.println("hu...hu...");
}
/**
*atem() aufrufen
*/
public void repeatBreath(int rep)
{
int i;
for(i = 0; i < rep; i++) {
this.breath();
}
}
private int height; // gekapselt, für den internen Gebrauch
}
Interne Methoden werden von der Kapselung nicht beeinflusst. Die internen Methoden von Human können jedes Mitglied aufrufen, sogar height undbreath(), die auf privat gesetzt sind
Externe Methoden können nur öffentliche Mitglieder aufrufen. Wenn wir uns außerhalb von Human befinden, beispielsweise in Test, können wir nur Mitglieder aufrufen, die in Human als öffentlich angegeben sind, nicht jedoch Mitglieder, die als privat angegeben sind.
Durch die Kapselung behält die Human-Klasse nur die folgenden Methoden als Schnittstellen bei:
1.getHeight()
2.growHeight()
3.repBreath()
Wir können die Human-Klasse und ihre Schnittstelle wie folgt darstellen:
„Fernbedienung mit Hülle“
Wenn wir die Aufrufhöhe von main erzwingen:
Kopieren Sie den Codecode wie folgt:
System.out.println(aPerson.height);
Es wird die folgende Fehlermeldung angezeigt:
Kopieren Sie den Codecode wie folgt:
Test.java:6: Höhe hat privaten Zugriff in Human
System.out.println(aPerson.height);
^
1 Fehler
Piep, du hast einen Stromschlag bekommen! Ein als privat deklariertes Mitglied kann nicht extern aufgerufen werden.
In der üblichen Java-Spezifikation werden Datenelemente, die den Zustand ausdrücken (z. B. Höhe), auf „privat“ gesetzt. Änderungen an Datenelementen müssen über die von der Schnittstelle bereitgestellten Methoden durchgeführt werden (z. B. getHeight() und growHeight()). Diese Spezifikation spielt eine Rolle beim Schutz von Daten. Benutzer können Daten nicht direkt ändern und müssen entsprechende Methoden zum Lesen und Schreiben von Daten verwenden. Klassendesigner können Datennutzungsspezifikationen zu Schnittstellenmethoden hinzufügen.
Klassenkapselung
In einer .java-Datei gibt es und kann nur eine Klasse mit dem Schlüsselwort public geben, z. B. die obige Testklasse. Von jeder anderen Klasse aus können wir diese Klasse also direkt aufrufen. Die menschliche Klasse hat kein Schlüsselwort. Früher hatten Mitglieder unserer Objekte keine Schlüsselwörter. Dieses Fehlen von Schlüsselwörtern stellt auch eine Art Sichtbarkeit dar, auf die ich bei der Erläuterung von Paketen näher eingehen werde.
Üben Sie die Kapselung einer Torch-Klasse zur Darstellung einer Taschenlampe. Die Schnittstelle verfügt über Schalt- und Ladefunktionen. Die internen Mitglieder haben Macht.
Zusammenfassen
Kapselung, Schnittstelle
privat, öffentlich