Ich beziehe mich nicht auf Klassenfolien, daher denke ich, dass dies aus einer anderen Perspektive erklärt wird. Vielleicht sage ich es (sollte).
Bitte lassen Sie mich wissen, wenn Sie einen Fehler machen können, da es sich um eine Ad-lib handelt!
Teil 1 Erstellen wir eine Instanz Teil 2 Reiniger mit Konstruktor Teil 3 Kontrollieren Sie den Zugriff und begrenzen Sie eingehende Werte ← Imakoko Teil.4 Versuchen Sie, Klassenvariablen / -methoden zu verwenden
Teil 2 implementierte den Konstruktor. Ein Konstruktor ist eine spezielle Methode, die beim Erstellen einer Instanz nur einmal ausgeführt wird. Der Konstruktor kann implementiert werden, indem der Name der Klasse geschrieben wird.
DigitalStudentCard.java
class DigitalStudentCard{
//Schülernummer
int num;
//Name
String name;
//Konstrukteur
DigitalStudentCard(int num, String name){
//Argument num zu Instanznummer(this.num)Ersatz für
this.num = num;
//Ebenfalls
this.name = name;
}
//Methode für die Ausgabe (Selbsteinführung erhalten)
String getSelfIntroduction(){
return "Schülernummer: " + num + "Name: " + name);
}
}
Der Konstruktor ist fast identisch mit der Methode, sodass Sie ihn auf ähnliche Weise schreiben können.
Wenn ich von Zugriffsbeschränkungen höre, denke ich, dass etwas gebunden sein sollte ... </ b>. Es ist wie es ist. Sie können den Zugriff auf Variablen, Methoden und Konstruktoren einschränken, indem Sie "privat" oder "öffentlich" hinzufügen! !!
Ich nenne diese Schlüsselwörter manchmal Zugriffsmodifikatoren </ b> Die meisten Leute sagen: "Warum machst du es nicht privat?" Oder "Ist es nicht öffentlich?"
Die Arten solcher Zugriffsmodifikatoren sind wie folgt.
Qualifikation | Wirksamkeit |
---|---|
public | Kann von überall zugegriffen werden |
(Schreiben Sie nichts) | Es kann von überall im Paket zugegriffen werden. (Ich werde es eines Tages erklären) |
protected | extends Oderimplements Es kann nur zugegriffen werden, wenn eine Eltern-Kind-Beziehung zu besteht. (Ich werde es eines Tages erklären) |
private | Auf diese kann nur von dieser Klasse oder Instanz aus zugegriffen werden. |
Fügen wir den "privaten" Zugriffsmodifikator zu "num" und "name" hinzu.
DigitalStudentCard.java
class DigitalStudentCard{
//Schülernummer
private int num;
//Name
private String name;
//Konstrukteur
DigitalStudentCard(int num, String name){
//Argument num zu Instanznummer(this.num)Ersatz für
this.num = num;
//Ebenfalls
this.name = name;
}
//Methode für die Ausgabe (Selbsteinführung erhalten)
String getSelfIntroduction(){
return "Schülernummer: " + num + "Name: " + name);
}
}
Schreiben Sie, um dies zu verwenden.
class UseClass{
public static void main(String[] args){
//Instanzgenerierung
DigitalStudentCardtanaka = new DigitalStudentCard(118114, "Kakuei Tanaka");
//Erstellen Sie eine andere Instanz
DigitalStudentCardnoguchi = new DigitalStudentCard(118514, "Hideyo Noguchi");
//Ausgabe
System.out.println(tanaka.getSelfIntroduction);
//Schülernummer:118114 Name:Kakuei Tanaka
System.out.println(noguchi.getSelfIntroduction);
//Schülernummer:118514 Name:Hideyo Noguchi
}
}
In diesem Beispiel ändert sich nichts, aber der folgende Schreibstil ist NG.
tanaka.num = 114514;
//Kompilierungsfehler
tanaka.name = "Kakuei Tanaka";
//Kompilierungsfehler
Da "num" und "name" durch den "privaten" Zugriffsmodifikator eingeschränkt sind, so dass nur innerhalb der Instanz auf sie zugegriffen werden kann, kann nicht auf sie zugegriffen werden.
"Es ist praktisch, wenn Sie von überall darauf zugreifen können, und es ist einfach."
Natürlich scheint es besser zu sein, ohne Einschränkungen so zu schreiben, wie Sie es möchten. Aber Sie können tun, was Sie wollen </ b> klingt nicht so?
damit. Es ist gefährlich. (Weniger Wortschatz)
Wenn dies Magimons Studentenausweis ist, wäre es unwiderstehlich, die Schulregistrierungsnummer oder den Namen ohne Erlaubnis neu zu schreiben. Selbst wenn Sie es ändern, sollten Regeln wie Nummern und Namen vorhanden sein, denen Sie folgen möchten.
Implementieren wir eine Methode namens Getter / Setter </ b>, um eine solche Regel zu erstellen.
Bitte seien Sie versichert, dass das bloße Sagen von "es heißt so" nicht bedeutet, eine spezielle Methode </ b> zu schreiben. So habe ich es oft gesehen.
Es ist sicher, Getter / Setter "get" () "und" set "()" zu nennen.
DigitalStudentCard.java
class DigitalStudentCard{
//Schülernummer
private int num;
//Name
private String name;
//Konstrukteur
DigitalStudentCard(int num, String name){
//Ich habe es so oft gemacht, dass ich einen Getter benutze
setNum(num);
//Ebenfalls
setName(name);
}
//Methode für die Ausgabe (Selbsteinführung erhalten)
String getSelfIntroduction(){
return "Schülernummer: " + num + "Name: " + name);
}
// -----hinzufügen-----
//Methode, die nur num (getter) zurückgibt
int getNum(){
return num;
}
//Methode, die nur den Namen zurückgibt (Getter)
String getName(){
return name;
}
//Methode zum Einstellen von num (Setter)
void setNum(int number){
//Verwenden Sie als Beispiel die Schulregistrierungsnummer unserer Schule
//Irgendwie werde ich älter
int year = number/1000;
//Verbieten Sie Werte über 119
if(year > 118){
year = 118;
}
//Extrahieren Sie nur zahlenähnliche Cousins
number = number%1000;
//Ich möchte es dreistellig anpassen. Wenn der Wert 999 überschreitet, setzen Sie ihn auf 999.
if(number > 999){
number = 999;
}
//Bleib und kehre zurück
return year*1000 + number;
}
//Methode zum Festlegen des Namens (Setter)
void setName(String name){
this.name = name;
}
}
Nennen wir diese Methoden.
class UseClass{
public static void main(String[] args){
//Instanzgenerierung
DigitalStudentCardtanaka = new DigitalStudentCard(118114, "Kakuei Tanaka");
//Zeigen Sie den Wert der Variablen num an
System.out.println(tanaka.getNum());
// >> 118114
//Zeigen Sie den Wert der Namensvariablen an
System.out.println(tanaka.getName());
//Kakuei Tanaka
//Ändern Sie den Wert der Variablen num
tanaka.setNum(200, 1000);
//Versuchen Sie absichtlich, einen großen Wert einzugeben
//Ändern Sie den Wert der Namensvariablen
tanaka.setName("Tanaka Kakuei");
//Mir fiel nichts ein, also was war es?
System.out.println(tanaka.getNum());
// 118999
System.out.println(tanaka.getName());
//Tanaka Kakuei
}
}
Auf diese Weise möchte ich nur "Nonne"! Ich will nur "Name"! Sie können dies mit getNum () oder getName () erledigen.
Wenn Sie Ihre Schulregistrierungsnummer aufgrund unvorhergesehener Umstände ändern möchten oder wenn Sie heiraten und sich Ihr Nachname ändert, können Sie sie mit "setNum ()" oder "setName ()" festlegen.
Es wäre ein Problem, wenn Sie einen unordentlichen Wert für die Schulregistrierungsnummer eingeben könnten. Daher haben wir einen Mechanismus erstellt, um zu überprüfen, ob es sich um einen geeigneten Wert handelt. Da der Wert, der in die Variable "num" eingegeben werden kann, begrenzt werden kann, kann vermieden werden, dass eine gesetzlose Zone entsteht.
Da "setNum ()" und "setName ()" auch im Konstruktor verwendet werden, war es möglich, den Zuweisungsprozess nur an einer Stelle durchzuführen. Selbst wenn später ein Fehler auftritt, müssen Sie auf diese Weise nur eine Stelle überprüfen, damit es einfacher ist, ihn zu beheben! !!
Zugriffsmodifikatoren können auch für Methoden und Konstruktoren verwendet werden.
private void setName(String name){
//Etwas zu verarbeiten
}
Wie bei Variablen ist der Zugriffsbereich auf diese Klasseninstanz beschränkt.
Als nächstes greifen wir mit Klassenvariablen und Klassenmethoden von verschiedenen Stellen aus auf dasselbe Objekt zu! Weiter → Teil.4 Klassenvariablen / -methoden verwenden