Heim  >  Artikel  >  Java  >  Java-Grundlagen – abstrakte Klassen und Schnittstellen

Java-Grundlagen – abstrakte Klassen und Schnittstellen

巴扎黑
巴扎黑Original
2017-06-26 11:31:071331Durchsuche

Der Grund, warum abstrakte Klassen und Schnittstellen zusammengenommen werden, liegt darin, dass sie schwer zu unterscheiden und unabhängig voneinander sind. Nachdem ich die drei Hauptmerkmale der Java-Programmierung (Kapselung, Vererbung und Polymorphismus) kennengelernt habe, besteht mein größter Gewinn darin, dass ich langsam die Vorteile der objektorientierten Programmierung wie der Java-Sprache verstanden habe, die sowohl ihre eigene Unabhängigkeit bewahren als auch sich ständig weiterentwickeln kann Entwicklung. Wenn Kapselung und Vererbung die Grundlage für die Realisierung des Java-Polymorphismus sind, dann denke ich persönlich, dass abstrakte Klassen und Schnittstellen den Polymorphismus sehr gut unterstützen.

1. Abstrakte Klasse

Formal gesehen ist eine mit Abstract modifizierte Klasse eine abstrakte Klasse. Abstrakte Klassen sind unvollständig und können nur als Basisklassen verwendet und nicht instanziiert werden (können nicht neu sein).

Um es für Laien auszudrücken: Eine abstrakte Klasse macht nichts selbst. Sie erfordert, dass andere ihre Spezifikationen implementieren. Es definiert eine Reihe abstrakter Methoden, und die spezifischen Ausdrücke dieser Reihe abstrakter Methoden können durch abgeleitete Klassen implementiert werden. Bei der Implementierung abstrakter Klassen muss die Vererbung verwendet werden. Andernfalls ist die Erstellung bedeutungslos.

Bei der Verwendung abstrakter Klassen müssen Sie die folgenden Punkte beachten:

1. Eine abstrakte Klasse ist nur eine Referenz und kann nicht instanziiert werden. Die Arbeit der Instanziierung muss ihren Unterklassen überlassen werden.

2. Abstrakte Methoden müssen durch Unterklassen überschrieben werden.

3. Solange es eine Methode gibt, die als abstrakte Methode definiert ist (durch Zusammenfassung geändert), muss diese Klasse Als abstrakte Klasse definiert (der Klassenname muss auch durch die Zusammenfassung geändert werden);

4. Die abstrakte Klasse kann bestimmte Methoden enthalten oder nicht; >5. Die abstrakte Methode in der Unterklasse darf nicht denselben Namen haben wie die abstrakte Methode in der übergeordneten Klasse.

6. Abstract kann nicht dieselbe Methode parallel zu privat, statisch, fanal oder nativ ändern.
1 public abstract class ChouX {2     public abstract void method1();3 4     public void method2() {5 6     }7 }
Codebeispiel:

//抽象类public abstract class Animal {public abstract void shout();
}
1 //猫子类2 public class Cat extends Animal {3     public void shout() {4         System.out.println("喵~~");5     }6 }
//Dog子类public class Dog extends Animal {public void shout() {
        System.out.println("汪汪汪。。。");
    }
}

Ausgabe:

//测试类public class Test {public static void main(String[] args) {
        Animal a1 = new Dog();
        Animal a2 = new Cat();
        a1.shout();
        a2.shout();
    }
}

2. Schnittstelle

Für die objektorientierte Programmierung ist Abstraktion das Hauptfach Besonderheit. In Java kann die OOP-Abstraktion in zwei Formen widergespiegelt werden: abstrakte Klassen und Schnittstellen.

Schnittstelle bezieht sich in der Softwareentwicklung im Allgemeinen auf Methoden oder Funktionen, die von anderen aufgerufen werden.

Format:

[public] interface InterfaceName{

}
Damit eine Klasse einem bestimmten Satz von Schnittstellen folgt, müssen Sie das Schlüsselwort „implements“ verwenden .
Format:
<span style="color: #0000ff;"><span style="color: #99cc00;">//例子</span><br>interface</span><span style="color: #000000;"> Door{</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">abstract</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> open();</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">abstract</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> close();
}</span>
class ClassName implementiert Interface1, Interface2, Interface3....{} (ermöglicht einer Klasse, mehreren spezifischen Schnittstellen zu folgen)

3 Unterschied zwischen abstrakten Klassen und Schnittstellen

1. Unterschiede auf Syntaxebene

Zuallererst können abstrakte Klassen Details zur Implementierung von Mitgliedsmethoden bereitstellen, während nur öffentliche abstrakte Methoden vorhanden sein können Schnittstellen;

Zweitens können Mitgliedsvariablen in abstrakten Klassen von verschiedenen Typen sein, während Mitglieder in Schnittstellen nur vom öffentlichen statischen Endtyp sein können

Darüber hinaus können Schnittstellen keine statischen Codeblöcke und statischen Code enthalten Methoden, während abstrakte Klassen dies können;

Schließlich kann eine Klasse nur eine abstrakte Klasse, aber mehrere Schnittstellen erben.

2. Unterschiede auf der Designebene

Erstens ist eine abstrakte Klasse eine Abstraktion einer Sache, also eine Abstraktion einer Klasse, während eine Schnittstelle eine Abstraktion des Verhaltens ist .

Darüber hinaus ist die abstrakte Klasse die übergeordnete Klasse vieler Unterklassen und ein Vorlagendesign. Die Schnittstelle ist eine Verhaltensspezifikation.

Wenn Sie schließlich in einer abstrakten Klasse eine Methode ändern möchten, können Sie diese direkt in der abstrakten Klasse implementieren, und Unterklassen müssen keine Änderungen vornehmen. Sollte dies bei einer Schnittstelle passieren, müssen alle mit dieser Schnittstelle verknüpften Klassen geändert werden.

Zusammenfassung: Nachdem ich so viel gesagt habe, ist das Prinzip eigentlich ganz einfach, wenn man es erst einmal verstanden hat. Für abstrakte Klassen definieren Sie beispielsweise eine abstrakte Klasse als übergeordnete Klasse. Möglicherweise haben Sie eine Klasse nicht vollständig beschrieben oder sie wurde einige Jahre später aktualisiert. Es gibt immer Reservierungen. Zu diesem Zeitpunkt müssen Sie nicht in den Krieg ziehen, um die gesamte übergeordnete Klasse zu stürzen. Sie müssen nur die spezifischen Änderungen in der Unterklasse vornehmen. Es liegt an Ihnen, zu entscheiden, was Sie ändern möchten oder nicht und wann Sie es ändern möchten. Würde dies nicht die Flexibilität und Wiederverwendbarkeit erhöhen? Der Unterschied zwischen abstrakten Klassen und Schnittstellen besteht darin, dass Fische und Boote im Wasser schwimmen können, also nicht derselben Klasse angehören. Denken Sie nicht einmal daran, Fische und Boote in die gleiche Klasse einzuordnen, aber beide haben diese „Schwimm“-Aktion, also haben wir diese „Schwimm“-Aktion in eine Schnittstelle eingefügt, damit Fische sie nutzen können und Boote sie nutzen können. Sie können es in Zukunft verwenden, wenn Sie alles beschreiben möchten, was „schwimmen“ kann.

Es gibt einen sehr nützlichen Fall im Internet:

Sie können sorgfältig darüber nachdenken, um den Unterschied zwischen abstrakten Klassen und Schnittstellen zu verstehen.

1 //接口2 interface Alram{3   void alarm();4 }

Das obige ist der detaillierte Inhalt vonJava-Grundlagen – abstrakte Klassen und Schnittstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn