[JAVA] Vererbung und Schnittstelle.

Für mich. Das Folgende ist in Java geschrieben.

Ich denke nicht, dass es wirklich gut ist, aber ich habe diese Syntax noch nicht verwendet, daher gibt es wahrscheinlich ein Missverständnis. Schreiben Sie in Ihrer Freizeit Code, verschieben Sie ihn, oder ...? Ich werde es tun, also warte.

Erbe

Erbe. Das heißt erweitert. Die geerbte Klasse heißt Superklasse und Elternklasse. Die geerbte Klasse wird als untergeordnete Klasse bezeichnet.

Da die untergeordnete Klasse die gesamte Superklasse enthält, können Sie die Variablen und Methoden der Superklasse verwenden. Diejenigen mit dem Modifikator für den privaten Zugriff der Superklasse können nicht verwendet werden. Jeder geschützte Modifikator kann verwendet werden.

Das Folgende ist eine Klasse mysteriöser Kreaturen, die nur rennen und schlafen können. Die untergeordnete Klasse ruft vorerst nur die Funktion der übergeordneten Klasse auf.

Eine Kreatur, die beim Laufen 10 Ausdauer verbraucht und beim Schlafen 10 Ausdauer wiedererlangt.

sperClass.java


class superClass(){
    stamina = 100;

    protected void run(){
        stamina -= 10;
    }

    protected void sleep(){
        stamina += 10;
    }
}

childClass.java


class childClass extends superClass{
    public voic main(){
        System.out.println(stamina);
            //100 (Der Wert der Ausdauervariablen der übergeordneten Klasse wird angezeigt.)

        run();
        sleep();
            //Sie können die Methoden der übergeordneten Klasse verwenden
    }
}

Override Ich möchte eine Methode wie Superklasse in eine untergeordnete Klasse umschreiben. Überschreiben ist das, was Sie in solchen Zeiten tun. Die Methode kann überschrieben werden.

Lassen Sie uns die mysteriöse Kreatur, die rennt und schläft, in eine Bug-Kreatur der Cheat-Klasse verwandeln Eine Kreatur, die beim Laufen 5 Ausdauer verbraucht und beim Schlafen 50 Ausdauer wiedererlangt.

sperClass.java


class superClass(){
    int stamina = 100;

    protected void run(){
        stamina -= 10;
    }

    protected void sleep(){
        stamina += 10;
    }
}

childOverride.java


class childOverride extends superClass{
    @Override
    private void run(){
        stamina -= 5;
    }

    @Override
    private void sleep(){
        stamina += 50;
    }

    public void main(){
        //Etwas angemessenes zu verarbeiten
    }
}

Ja. Ich habe eine Kreatur.

Durch die Neudefinition der Methode mit demselben Namen in der untergeordneten Klasse wird der in der untergeordneten Klasse definierte Inhalt ersetzt.

@ Override dient dazu, dem Compiler zu verdeutlichen, dass die folgende Methode versucht, sie zu überschreiben, und es scheint, dass es kein Problem im Betrieb gibt, selbst wenn es nicht geschrieben ist. Wenn Sie jedoch "@ Override" hinzufügen, wird ein Fehler ausgegeben, wenn die gleichnamige Methode beim Kompilieren nicht in der Superklasse vorhanden ist, sodass Sie sie finden können, bevor Sie den Fehler ausführen.

Es können nur Methoden überschrieben werden, keine Variablen.

Super Keyword

Ich möchte den Konstruktor der Superklasse ausführen. Ich möchte die Funktion der Superklasse vor dem Überschreiben verwenden. Ich möchte eine Variable der Superklasse neu zuweisen.

In solchen Fällen wird das Schlüsselwort "super" verwendet.

Wenn eine Instanz einer untergeordneten Klasse erstellt wird, wird auch eine Instanz der Superklasse ohne Berechtigung erstellt. Dies ist jedoch hilfreich, wenn Sie dem Konstruktor dieser Superklasse ein Argument übergeben möchten.

super(param, args);

Wenn Sie es so nennen, können Sie das Argument an den Konstruktor übergeben. Sie können den Konstruktor der Superklasse jederzeit aufrufen, dies wird jedoch nur vom Konstruktor der untergeordneten Klasse empfohlen. Sie sollten dies daher nicht tun.

Schnittstelle

Es scheint gut zu denken, dass die Oberfläche wie eine Konstruktionszeichnung ist. Hiermit wird deutlich angegeben "Bitte bereiten Sie eine solche Funktion vor".

public interface actions{
    void run();
    void sleep();
    void eat();
    void jump();

Also werde ich eine Klasse schreiben, um entsprechend zu implementieren.

class Hito implements antions{
    @Override
    public void run(){
        //Sprint mit zwei Beinen
    }

    @Override
    public void sleep(){
        //Leg einen Futon und schlafe
    }

    @Override
    public void eat(){
        //Mit Löffel und Gabel essen
    }

    ...

}

Das ist eine Person. Sie können mit zwei Beinen auf Hochtouren laufen.

class Dog implements antions{
    @Override
    public void run(){
        //Sprint mit vier Beinen
    }

    @Override
    public void sleep(){
        //Rollen Sie sich auf und schlafen Sie an Ihrem Lieblingsplatz
    }

    @Override
    public void eat(){
        //Gehen Sie mit Ihrem Mund direkt auf den Teller
    }

    ...

}

Das ist ein Hund. Sie sollten auf vier Beinen laufen, den Schlaf aufrollen und nur mit dem Mund essen. Wenn es ein allgemeiner Hund ist.

Mit dieser Art von Gefühl besteht die Schnittstelle darin, das Design und die Implementierung getrennt zu schreiben. "implementiert" bedeutet "Implementierung". Ist es wie eine Vorlage beim Erstellen einer Klasse? Gefühl.

Abstrakte Klasse (abstrakt)

Eine Klasse, die wie die oben erwähnte Schnittstelle immer eine Vererbung erfordert, wird als abstrakte Klasse bezeichnet. Wenn Sie den Modifikator "abstruct" an eine Klasse anhängen, können Sie keine sofortige direkte Instanz erstellen, und wenn Sie ihn an eine Methode anhängen, können Sie diese Methode nicht so aufrufen, wie sie ist. Alle Klassen, die Methoden mit dem Modifikator "abstruct" enthalten, müssen den Modifikator "abstruct" haben.

Sie sollten keine Instanz einer Klasse mit unvollendeten Methoden erstellen.

public abstruct class action{
    int O2;
    void Kokyu(){
        O2 += 10;
    }

    abstruct void run();
    abstruct void sleep();
    abstruct void eat();
}
class Hito extends action{
    @Override
    void run(){
        //Lauf
    }

    @Override
    void sleep(){
        //Leg einen Futon und schlafe
    }

    ...

    public void main(){
        Kokyu();
            //Atmen (super Klasse Methode)

        run()
            //Lauf

        sleep();
            //schlafen
    }
}

eh ...?

Ja ja. Ich kenne... Sie möchten echte Schnittstelle </ b> sagen. Ich verstehe, ich verstehe.

Im Fall einer Schnittstelle kann eine Klasse für mehrere Schnittstellen vollständig implementiert werden. Die Vererbung kann jedoch nicht von einer Klasse geerbt werden.

Die Schnittstellenvariable hat einen statischen Endmodifikator und wird zu einer Konstanten, sodass sie nicht neu zugewiesen werden kann. Außerdem sind alle in der Schnittstelle geschriebenen Methoden wie "abstruct", sodass keine Verarbeitung angewendet wird.

Da die Basis einer abstrakten Klasse eine Klasse ist, können Sie Methoden schreiben, die nicht "abstruct" sind, und Sie können auch Variablen haben. Es ist eine teilweise unvollendete Klasse, daher ist die Atmosphäre so, dass Sie sie verwenden sollten, nachdem Sie sie ordnungsgemäß abgeschlossen haben.

Konstruktionszeichnungen </ b> und unfertige Klassen </ b>. Es gibt so einen Unterschied.

Nebenbei: ist-a und hat-a

is-a ist-a ist A ist ein B. Die Idee, dass A B ist.

A ist eher wie B. B scheint in der Basis zu sein. Ein anderes C ist ebenfalls B-ähnlich. B scheint in der Basis zu sein.

Dann können sowohl A als auch C basierend auf B hergestellt werden. Dass ich denke)

has-a hat-a ist A hat ein B. Die Idee, dass A B hat.

A hat so etwas wie B. Ein anderes C hat auch so etwas wie B. Dann machen wir es möglich, dieses B-ähnliche Ding zu teilen. Dass ich denke)

Referenz

[Java] Was ist ein Override? Implementiere eine Schnittstelle! Verwendung von Geräten in Java [Für Anfänger] Welche soll ich verwenden, Schnittstelle oder abstrakte Klasse?

Recommended Posts