Nachtrag: 2020/3/13 Da in dem Kommentar darauf hingewiesen wurde, dass der Inhalt dieser Zeit eher "versteckte Daten" als "Kapselung" war, wurde er korrigiert. Der Titel hat sich auch von Kapselung zu Datenverstecken geändert.
Dieser Artikel ist ein Memorandum. Obwohl es sich um einen Inhalt auf Referenzebene handelt, lautet der in diesem Artikel zu veröffentlichende Code ~~ ** Der Fehler ** ist das Zentrum. Dies dient dazu, den Teil zu veröffentlichen, der beim Codieren tatsächlich falsch war, und ihn zur Selbstreflexion zu veröffentlichen. ~~ Außerdem werde ich hier nicht auf den tiefen Teil eingehen, da ich ihn später überprüfen werde, während ich auch die Fragen zur Java Silver-Prüfung studiere.
Sprache: Java11, JDK13.0.2 Betriebsumgebung: Windows 10
Ich habe bestätigt, dass die von new
erstellte Instanz eigene Mitglieder (Felder und Methoden) hat, die von der Klasse geerbt wurden. Aber in der letzten "Cat" -Klasse
Cat myCat = new Cat;
mycat.weight = -20;
Und der Wert, der beim Erstellen der Klasse "Cat" nicht erwartet wurde, kann innerhalb der Methode "main" beliebig gespeichert werden. Das Zulassen des Zugriffs auf das Feld ** (diesmal "doppeltes Gewicht") **, das in der Klasse "Cat" direkt innerhalb der "main" -Methode festgelegt wurde, kann zu Problemen führen.
private
Wenn also "Ich möchte ein Mitglied (Feldmethode) haben, das nicht von außerhalb der Klassenverarbeitung verarbeitet werden kann", ist der an das Mitglied angehängte Modifikator (Feldmethode) ** privat
**.
Dieses Mal möchte ich die Cat-Klasse behandeln, indem ich von der Farbe des Typs String zur Höhe des doppelten Typs wechsle.
classCat erneut herausfordern
class Cat
{
private double weight;
private double height;
//Klasse
public void setWeightHeight(double w,double h)
{
if(w > 0 && w <= 50){
weight = w;
System.out.println("Das Gewicht dieser Katze" + weight + "Ich habe es kg gemacht.");
} else{
System.out.println("Ich glaube nicht, dass ich dieses Gewicht habe ...");
}
if(h > 0 && h <= 200){
height = h;
System.out.println("Die Größe dieser Katze" + height + "Ich habe es cm gemacht.");
} else{
System.out.println("Ich habe noch nie von einer Katze dieser Größe gehört ...");
}
}
double getWeight()
{
System.out.println("Aktualisieren Sie das Gewicht der Katze.");
return weight;
}
double getHeight()
{
System.out.println("Aktualisieren Sie die Größe der Katze.");
return height;
}
void introduce()
{
System.out.println("Das Gewicht dieser Katze" + weight + "Es ist kg.");
System.out.println("Die Größe dieser Katze" + height + "cm.");
}
}
Da die "Gewichtsgröße" der Cat-Klasse jetzt "privat" ist, besteht kein Grund zur Sorge, dass der Wert manipuliert wird.
public
Aber wenn Sie den Wert wirklich nicht ändern können, können Sie den Wert der neuen myCat
-Instanz, die Sie new
möchten, nicht ändern.
Aber in der Cat
Klasse
public void setWeightHeight(double w,double h)
Ich möchte, dass Sie darauf achten. Dies ist eine in der Cat-Klasse definierte Methode, deren Modifikator jedoch auf ** public
** gesetzt ist. Dies ist ein Modifikator "Zugriff von außerhalb der Klasse zulassen" während der Verarbeitung
weight = w;
height = h;
Und ** Zugriff auf das Feld ** privat
**.
Von den Methoden wird die Tatsache verwendet, dass von Methoden in derselben Klasse auf "privat" zugegriffen werden kann, und die Speicherung auf den Wert "privat" über ** In-Method-Verarbeitung ist möglich. Dürfen **.
public void setWeightHeight(double w,double h)
Enthält eine if-Anweisung, die die Zuweisung von Werten verhindern kann, die die Bedingungen nicht erfüllen. Jetzt müssen Sie sich keine Sorgen mehr machen, lächerliche Werte zu speichern.
Zu dem Vorgang, den ich diesmal gesehen habe: "Verwenden Sie eine Methode, um einen Wert im Feld" privat "zu speichern." Zitat aus dem Nachschlagewerk Easy Java 7th Edition
Eine Funktion, die Daten (Felder) und Funktionen (Methoden) in einer Klasse zusammenfasst und den Mitgliedern, die Sie schützen möchten, eine private Funktion zuweist, damit auf sie nicht ohne Erlaubnis zugegriffen werden kann.
Ist. Dieses funktionale Design ** ~~ Kapselung ~~ Daten verstecken ** I nenne es. Dies ist ** eines der Grundprinzipien des objektorientierten Entwurfs **, und zu diesem Zweck werden Klassen erstellt. Ich werde mich wieder mit anderen Prinzipien befassen, aber sie sind alle wichtige Prinzipien, deshalb möchte ich sie fest erfassen.
Ich schreibe und kompiliere Variablen und Ausdrücke so oft wie möglich selbst. Wenn ich sie also vollständig zitieren möchte, werde ich sie beschreiben.
Easy Java 7th Edition Java SE11 Silver Problem Collection (allgemein bekannt als Kuromoto)
Recommended Posts