Java ab Anfänger überschreiben

Einführung

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.

Umgebung

Sprache: Java11, JDK13.0.2 Betriebsumgebung: Windows 10

überschreiben

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,

  1. Gleiche Signatur (Methodenname, Argumentlistentyp, Nummer, Reihenfolge)
  2. Gleiche oder lockerere Zugriffsmodifikatoren
  3. Der Rückgabetyp ist grundsätzlich der gleiche (ohne kovariante Rückgabewerte).

Die Tatsache, dass eine Unterklassenmethode im Namen eines Mitglieds einer Oberklasse handelt, wird als ** überschreibend ** bezeichnet.

Alles zusammen in Superklasse

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 nur hinzufügen möchten

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) `.

abschließend

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.

Referenz

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

Java ab Anfänger überschreiben
Java, Instanz für Anfänger
Java ab Anfänger, Vererbung
Java, Überlastungskonstruktor ab Anfänger
Java für Anfänger, Variablen und Typen
Java ab Anfänger, verschachtelt / Pause / Weiter
Java, if-Anweisung / switch-Anweisung ab Anfänger
Java, für Anweisung / while-Anweisung ab Anfänger
Java ab Anfänger, Klassendeklaration / Objekterzeugung
Java-Leben von vorne anfangen
Java (überschreiben)
Java Anfänger 4
Java Anfänger 3
Java Anfänger
Java, abstrakte Klasse für Anfänger
Java, Schnittstelle für Anfänger
IntelliJ ab 1
Java ab Anfänger, logischer Operator / bedingter Operator
Einführung in Java ab 0 Teil 1
Übungen für Java-Anfänger
Java-Übung "Anfänger"
Für Java-Ingenieure, die ab sofort Kotlin starten
[Java] Überladen / Überschreiben / Vererbung
Rufen Sie Java von JRuby aus auf
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Eval Java-Quelle von Java
Bild-in-Bild ab iOS14
Greifen Sie über Java auf API.AI zu
Von Java zu Ruby !!
[Java] Überladen und überschreiben
[Java] Plattformen zur Auswahl für die Java-Entwicklung ab sofort (2020)
Migration von Cobol nach JAVA
Progate Java (Anfänger) Review & Zusammenfassung
Elastic Search Indexerstellung aus Java
Neue Funktionen von Java7 bis Java8
Stellen Sie eine Verbindung von Java zu PostgreSQL her
Verwenden von Docker von Java Gradle
Von ineffektivem Java zu effektivem Java
JavaScript von Java aus gesehen
[Anfänger] Java grundlegende "Array" Beschreibung
Führen Sie Nicht-Java-Anweisungen von Java aus
Löse den AtCoder-Anfängerwettbewerb 151 mit Java
Rufen Sie Kotlins versiegelte Klasse von Java aus an
Unterschiede zwischen "Anfänger" Java und Kotlin
Löse den AtCoder Beginner Contest 150 mit Java
Code Java von Emacs mit Eclim
Deep Learning Java von Grund auf 6.4 Regularisierung
Löse den AtCoder-Anfängerwettbewerb 153 mit Java
[Java-Anfänger] Über Abstraktion und Schnittstelle
Land von IP-Adresse abrufen (Java)
Führen Sie node.js von Android Java aus (Verarbeitung)
Führen Sie eine Batchdatei von Java aus
[Java] Entfernen Sie Leerzeichen in Zeichenfolgen
Akka praktische Vorbereitungsprozedur aus Java
[Java-Anfänger] == Operator und Gleiche Methode
Greifen Sie über eine Java-Anwendung auf Teradata zu
Löse den AtCoder-Anfängerwettbewerb 175 mit Java
Verwenden Sie Chrome Headless von Selenium / Java
Java soll ab heute dabei sein
Von Java zu VB.NET-Writing Kontrastmemo-