Wir haben immer Klassen definiert, um Objekte zu erstellen. Objekte sind Entitäten mit Funktionalität, während Klassen Typklassifizierungen von Objekten sind. Dies ist ein Grundkonzept der Objektorientierung.
Bei der Vererbung behandeln wir Klassen als erweiterbare Subjekte, was unser Verständnis von „Klassen“ verbessert.
Über den Unterricht selbst gibt es noch viel mehr zu besprechen. Wir werden uns weiter vertiefen
statische Datenelemente
Es gibt einige Daten, die verwendet werden, um den Status der Klasse auszudrücken. In der Human-Klasse können wir beispielsweise „Bevölkerung“ verwenden, um die Gesamtzahl der Objekte in der Human-Klasse darzustellen. „Bevölkerung“ beschreibt direkt den Zustand einer Klasse, nicht eines Objekts.
Die Menschenklasse hat eine Bevölkerung von 8
Alle Objekte der Klasse teilen sich die „Population“-Daten. Solche Daten werden als Klassendatenelement (Klassenfeld) bezeichnet.
In der Klassendefinition verwenden wir das Schlüsselwort static, um Klassendatenelemente zu deklarieren, wie zum Beispiel:
Kopieren Sie den Codecode wie folgt:
KlasseMensch
{
/**
* Konstruktor
*/
öffentlich Mensch(int h)
{
this.height = h;
}
/**
*Accessor
*/
public int getHeight()
{
return this.height;
}
/**
* Mutator
*/
öffentliche Leere wachsenHöhe(int h)
{
this.height = this.height + h;
}
/**
*Atem
*/
öffentlicher leerer Atem()
{
System.out.println("hu...hu...");
}
private int-Höhe;
private statische Int-Population;
öffentlicher statischer Boolescher Wert is_mammal = true;
}
Wir definieren zwei Klassendatenelemente: Population und is_mammal. Alle menschlichen Objekte teilen Populationsdaten; das Attribut is_mammal (ist ein Säugetier) jedes menschlichen Objekts ist wahr.
Klassendatenmitglieder müssen außerdem Zugriffsberechtigungen festlegen. Auf als öffentlich deklarierte Klassendatenelemente kann direkt von außen mit class.field oder object.field zugegriffen werden (sofern ein Objekt dieser Klasse vorhanden ist). Beide Zugriffsmethoden sind sinnvoll, da Klassendatenmitglieder als Attribute der Klasse und als von allen Mitgliedern gemeinsam genutzte Attribute betrachtet werden können. Wenn ein Klassendatenelement als privat definiert ist, kann auf das Klassendatenelement nur innerhalb der Klasse zugegriffen werden.
(Is_mammal wurde oben nur zur Demonstration auf public gesetzt. Das ist ziemlich gefährlich. Wenn jemand Human.is_mammal=false; verwendet, werden alle Menschen darunter leiden. Auch hier besteht das Grundprinzip darin, die Daten so weit wie möglich auf privat zu setzen.)
statische Methode
Wir können auch Klassenmethoden haben, bei denen es sich um als statisch deklarierte Methoden handelt. Klassenmethoden stellen Aktionen dar, die eine Klasse implementieren kann, und die Operationen betreffen kein bestimmtes Objekt. Wenn eine Methode als statisch deklariert ist, kann sie nur statische Daten und Methoden aufrufen, nicht jedoch nicht statische Daten und Methoden.
Tatsächlich werden in einer statischen Methode die Parameter this und super nicht implizit übergeben. Wir haben keine Möglichkeit, auf die zum Objekt gehörenden Daten und Methoden zu verweisen (was genau das ist, was wir wollen).
Basierend auf dem oben Gesagten haben wir die folgende Beziehung:
Eine rot gepunktete Linie zeigt Unzugänglichkeit an. Mit anderen Worten: Auf die Daten des Objekts kann in Klassenmethoden nicht zugegriffen werden.
Als nächstes fügen wir eine statische Methode getPopulation() hinzu, die eine statische Datenpopulation zurückgibt:
Kopieren Sie den Codecode wie folgt:
KlasseMensch
{
/**
* Konstruktor
*/
öffentlich Mensch(int h)
{
this.height = h;
}
/**
*Accessor
*/
public int getHeight()
{
return this.height;
}
/**
* Mutator
*/
öffentliche Leere wachsenHöhe(int h)
{
this.height = this.height + h;
}
/**
*Atem
*/
öffentlicher leerer Atem()
{
System.out.println("hu...hu...");
}
private int-Höhe;
/*
* Statische Methode, Zugriffspopulation
*/
öffentliches statisches int getPopulation()
{
return Human.population;
}
private statische Int-Population;
privater statischer boolescher Wert is_mammal = true;
}
Wenn wir eine Klassenmethode aufrufen, können wir sie über class.method() oder object.method() aufrufen. Verwenden Sie beispielsweise den folgenden Testklassentest:
Kopieren Sie den Codecode wie folgt:
Öffentlicher Klassentest
{
public static void main(String[] args)
{
System.out.println(Human.getPopulation());
Human aPerson = new Human(160);
System.out.println(aPerson.getPopulation());
}
}
Wir haben die Klassenmethode getPopulation() außerhalb der Klassendefinition auf zwei Arten aufgerufen.
Objektmethoden ändern Klassendaten
Wir sehen, dass Objektmethoden auf Klassendaten zugreifen können. Das ist ein sehr nützliches Konzept. Der Zustand einer Klasse kann sich mit Objekten ändern. Beispielsweise sollte „Bevölkerung“ beim Erstellen eines Objekts um 1 erhöht werden. Wir können die „Population“-Daten der Klasse in den Methoden des Objekts ändern. Wir greifen auf die Klassendatenelemente im folgenden Konstruktor zu. Die Konstruktionsmethode hier ist eine nicht statische Methode, also eine Objektmethode:
Kopieren Sie den Codecode wie folgt:
KlasseMensch
{
/**
* Konstruktor
*/
öffentlich Mensch(int h)
{
this.height = h;
Human.population = Human.population + 1;
}
/**
*Accessor
*/
public int getHeight()
{
return this.height;
}
/**
* Mutator
*/
öffentliche Leere wachsenHöhe(int h)
{
this.height = this.height + h;
}
/**
*Atem
*/
öffentlicher leerer Atem()
{
System.out.println("hu...hu...");
}
private int-Höhe;
/*
* Statische Methode, Zugriffspopulation
*/
öffentliches statisches int getPopulation()
{
return Human.population;
}
private statische Int-Population;
privater statischer boolescher Wert is_mammal = true;
}
Jedes Mal, wenn wir ein Objekt erstellen, ändern wir die Klassendaten durch die Konstruktionsmethode des Objekts und erhöhen die Populationsklassendaten um 1. Auf diese Weise kann die Population die Gesamtzahl der zu dieser Klasse gehörenden Objekte in Echtzeit widerspiegeln (Sie können in Test mehrere Objekte erstellen und dann Human.population drucken).
Zusätzlich zum oben angegebenen Konstruktorbeispiel können wir auch in gewöhnlichen Objektmethoden auf Klassendaten zugreifen.
Finale
Die grundlegende Bedeutung des Schlüsselworts final ist: Diese Daten/Methode/Klasse können nicht geändert werden.
1. Endgültige Grundtypdaten: Konstanter Wert, der nur einmal zugewiesen und nicht erneut geändert werden kann.
2.Final-Methode: Diese Methode kann nicht überschrieben werden. Private Methoden sind standardmäßig endgültige Methoden.
3. Abschlussklasse: Diese Klasse kann nicht vererbt werden.
Objekte gewöhnlicher Typen können auch das Schlüsselwort final haben, was bedeutet, dass die Objektreferenz (Referenz) nicht mehr geändert werden kann. Das heißt, die Referenz kann nur auf ein Objekt verweisen. Der Inhalt des Objekts kann sich jedoch ändern (ähnlich wie bei statischen Zeigern in C). Auf Objektreferenzen gehen wir später ein.
Wenn ein Basisdatentyp sowohl endgültig als auch statisch ist, speichert er nur eine Kopie des festen Werts. Dies eignet sich hervorragend zum Speichern von Konstanten wie Pi.
Zusammenfassen
statisches Feld, statische Methode
class.static_method()
Finale