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 fehlerhaften Teil während der eigentlichen Codierung zu veröffentlichen und 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
Das letzte Mal habe ich mich mit der Beziehung zwischen Oberklassen und Unterklassen befasst.
Die Unterklasse erbt die Methoden der Oberklasse, aber manchmal möchten Sie einen anderen Prozess definieren, während Sie denselben Methodennamen verwenden.
Zum Beispiel, wenn Sie eine Methode zum Überprüfen von Mitgliedern mit show 〇〇 ()
vorbereiten. Selbst wenn Sie dasselbe überprüfen, können Sie watch 〇 〇 (), siehe 〇 〇 () und check 〇 ()
ordnungsgemäß verwenden. Unterschiedliche Argumente und Typen machen es jedoch sehr schwierig, sich zu erinnern und zu verwenden, und der unnötig lange Code verringert die Lesbarkeit.
In der Unterklasse können Sie eine neue Methode definieren, die genau der in der Oberklasse ** implementierten entspricht. Beim Aufrufen von einem Objekt hat die Unterklasse Priorität. ** **.
Als Bedingung,
Die Tatsache, dass eine Unterklassenmethode im Namen eines Mitglieds einer Oberklasse handelt, wird als ** überschreibend ** bezeichnet.
Wie ich oft schreibe, erben die Unterklassen die Mitglieder der Oberklasse. Durch Überschreiben ist es dann möglich, einen Prozess zu schreiben, der der Unterklasse zugeordnet ist, und ihn bevorzugt funktionieren zu lassen. Daher kann bei Verwendung einer Unterklasse, die ein Kind derselben Oberklasse ist, die Verarbeitung gemeinsam durch das Verfahren der Oberklasse beschrieben werden.
arrayCatsShow.java
class WildCat
{
protected int number;
protected double weight;
public WildCat()
{
number = 1;
weight = 1.0;
}
public void getCat(int n,double w)
{
number = n;
weight = w;
System.out.println(number +"Das Gewicht der zweiten Katze" + weight + "Es ist kg.");
}
public void show()
{
System.out.println("Diese Katze" + number + "Dies ist die zweite Katze.");
System.out.println("Das Gewicht dieser Katze" + weight + "Es ist kg.");
}
}
Bereiten Sie basierend auf dieser WildCat-Klasse die HouseCat- und MyCat-Klassen vor.
arrayCatsShow.java
class HouseCat extends WildCat
{
public void show()
{
System.out.println("Diese Hauskatze" + number + "Es ist der zweite." );
}
}
class MyCat extends WildCat
{
public void show()
{
System.out.println("Von diesen Katzen" + number + "Das aktuelle Gewicht ist" + weight + "war." );
}
}
Dann bereiten Sie eine einzelne Katze vor.
arrayCatsShow.java
class arrayCatsShow
{
public static void main(String[] args)
{
WildCat[] cats = new WildCat[4];
cats[0] = new WildCat();
cats[0].getCat(1, 5.2);
cats[1] = new HouseCat();
cats[1].getCat(2, 4.2);
cats[2] = new MyCat();
cats[2].getCat(3, 5.6);
cats[3] = new MyCat();
cats[3].getCat(4, 8.4);
for(int i=0; i< cats.length; i++){
cats[i].show();
}
}
}
Da wir das Superklassen-Array vorbereitet und dann einzeln "neu" sind, erscheinen Sätze, die auf jeder "show ()" - Definition basieren.
Wenn Sie Superklasse + Unterklasse verarbeiten möchten.
HouseCatShow.java
class HouseCat extends WildCat
{
public void show()
{
super.show();
System.out.println("Diese Hauskatze" + number + "Es ist der zweite." );
}
}
Sie müssen nicht alles erneut schreiben, da Sie die Verarbeitung der Superklasse wie bei "super. Method name" ausführen können. Dies gilt auch für Felder, sodass Sie mit super.field
auch Superklassenwerte einbringen können.
Übrigens, wenn Sie die Superclass-Methode nicht überschreiben möchten, können Sie ** final
wie public final void show ()
hinzufügen und Sie können sie nicht überschreiben .
Dies kann auch mit dem Klassennamen und dem Feld erfolgen. Wenn es sich also um eine "endgültige Klasse" handelt, ist sie ** nicht erweiterbar ** der Unterklasse, und wenn es sich um ein "endgültiges Feld" handelt, ändert sich der Wert des Felds ** nur zur Initialisierung zum Zeitpunkt der Deklaration. konstant) `.
Ich habe das Wort ** kovarianter Rückgabewert ** im Silver-Problembuch gefunden, werde aber bald die Klassenbibliothek untersuchen, daher möchte ich die Beziehung zwischen den Klassen klären, bevor ich mich damit befasse.
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