1. Schnittstelle
1.1 Überblick über Schnittstellen
Eine Schnittstelle ist eine Sammlung von Funktionen. Sie kann auch als Datentyp betrachtet werden, und sie ist abstrakter als eine abstrakte Klasse.Klasse 。
Eine Schnittstelle beschreibt nur die Methoden, die sie haben sollte, ohne konkrete Implementierung. Die konkrete Implementierung erfolgt durch die Implementierungsklasse der Schnittstelle (äquivalent zu einer Unterklasse der Schnittstelle). Dies trennt die Definition der Funktionalität von ihrer Implementierung und optimiert das Programmdesign.
1.2 Format & Verwendung von Schnittstellen
1.2.1 Format einer Schnittstelle
Anders als beim Definieren einer Klasse,classbesteht der Unterschied darin, dass Sie beim Definieren einer Schnittstelle dasinterfaceSchlüsselwort verwenden müssen.
Die Datei, in der die Schnittstelle definiert wird, ist immer noch eine.javaDatei. Obwohl die Deklaration dasinterfaceSchlüsselwort verwendet, erzeugt sie nach der Kompilierung immer noch eine.classDatei. Dadurch können wir eine Schnittstelle als eine spezielle Klasse betrachten, die nur Merkmalsdeklarationen enthält.
Definitionsformat:public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
}
1.2.2 Verwendung von Schnittstellen
Alle Methoden in einer Schnittstelle sind abstrakte Methoden. `new` direkt auf einer Schnittstelle zu verwenden, um Methoden aufzurufen, ist sinnlos, und Java erlaubt dies nicht.
Die Beziehung zwischen einer Klasse und einer Schnittstelle ist eine Implementierungsbeziehung, d. h., eine Klasse implementiert eine Schnittstelle. Der Vorgang der Implementierung ähnelt der Vererbung, aber das Schlüsselwort ist anders; die Implementierung verwendetimplements。
Nachdem andere Klassen (Implementierungsklassen) eine Schnittstelle implementiert haben, ist es gleichbedeutend mit der Deklaration:"Ich sollte die Funktionalität dieser Schnittstelle haben."Die Implementierungsklasse muss weiterhin die Methoden überschreiben, um die spezifische Funktionalität zu implementieren.
Format:
class 类 implements 接口 {
重写接口中方法
}
Nachdem eine Klasse eine Schnittstelle implementiert hat, erbt die Klasse die abstrakten Methoden von der Schnittstelle. An diesem Punkt muss die Klasse diese abstrakten Methoden überschreiben, um die konkrete Logik zu vervollständigen.
1.2.3 Beispielcode 1
Beispiel
1.3 Eigenschaften von Membern in einem Interface
-
1. Variablen können in einem Interface definiert werden, aber sie müssen mit festen Modifikatoren modifiziert werden: `public static final`. Daher werden Variablen in einem Interface auch Konstanten genannt, und ihre Werte können nicht geändert werden. Wir werden das Schlüsselwort `final` später erklären.
-
2. Methoden können in einem Interface definiert werden, und Methoden haben auch feste Modifikatoren: `public abstract`.
-
3. Ein Interface kann keine Objekte erstellen.
-
4. Eine Unterklasse muss alle abstrakten Methoden des Interfaces überschreiben, bevor sie instanziiert werden kann. Andernfalls ist die Unterklasse eine abstrakte Klasse.
1.3.1 Beispielcode 2
Beispiel
1.4 Beziehung zwischen Schnittstellen und Klassen
- A: Zwischen Klassen: Vererbungsbeziehung. Eine Klasse kann direkt nur von einer Elternklasse erben, unterstützt aber mehrstufige Vererbung.
- B: Zwischen Klassen und Schnittstellen: nur Implementierungsbeziehung. Eine Klasse kann mehrere Schnittstellen implementieren.
- C: Zwischen Schnittstellen: nur Vererbungsbeziehung. Eine Schnittstelle kann mehrere Schnittstellen erben.
1.4.1 Beispielcode 3
Beispiel
1.5 Die Idee der Interfaces
Zuvor haben wir die Code-Darstellung von Interfaces kennengelernt. Jetzt lernen wir die Idee hinter Interfaces kennen und erklären sie anschließend anhand von Beispielen aus dem Alltag.
Zum Beispiel: Wir alle wissen, dass ein Computer viele Anschlüsse hat, und an diese Anschlüsse können entsprechende Geräte angeschlossen werden. Warum können diese Geräte angeschlossen werden? Der Hauptgrund ist, dass diese Geräte bei ihrer Herstellung den Nutzungsregeln des Anschlusses entsprachen; andernfalls könnten sie nicht an den Anschluss angeschlossen werden, geschweige denn verwendet werden. Es zeigt sich, dass uns die Existenz dieser Anschlüsse erlaubt, mehr Geräte zu verwenden.
Die Entstehung von Interfaces erleichtert die spätere Nutzung und Wartung. Eine Seite verwendet das Interface (wie einen Computer), und die andere Seite implementiert das Interface (Geräte, die an den Anschluss angeschlossen werden). Zum Beispiel verwendet ein Laptop diese Regel (Interface), und Computerperipheriegeräte implementieren diese Regel (Interface).
Interfaces werden im Collection-Framework häufig verwendet:
Collection 接口
List 接口
ArrayList 实现类
LinkedList 实现类
Set 接口
1.6 Vorteile von Interfaces
- 1. Die Beziehung zwischen einer Klasse und einer Schnittstelle ist die Implementierung, und es handelt sich um Mehrfachimplementierung. Eine Klasse kann mehrere Schnittstellen implementieren. Die Beziehung zwischen Klassen ist die Vererbung. Vererbung in Java ist Einfachvererbung; eine Klasse kann nur eine Oberklasse haben. Damit wird die Einschränkung der Vererbung durchbrochen.
- 2. Regeln für die Außenwelt bereitstellen (USB-Schnittstelle).
- 3. Die Kopplung des Programms verringern (es ermöglicht modulare Entwicklung; sobald Regeln definiert sind, implementiert jede Person ihr eigenes Modul, was die Entwicklungseffizienz verbessert).
1.7 Unterschiede zwischen Schnittstellen und abstrakten Klassen
1. Gemeinsamkeit:Beide abstrahieren fortlaufend Methoden heraus, die abstrakt sind und keine konkrete Implementierung haben, und keine von beiden kann instanziiert werden (es können keine Objekte erstellt werden).
2. Unterschiede
1: Beziehung zu Klassen
(1) Die Beziehung zwischen einer Klasse und einer Schnittstelle ist die Implementierung, und es handelt sich um Mehrfachimplementierung; eine Klasse kann mehrere Schnittstellen implementieren. Die Beziehung zwischen einer Klasse und einer abstrakten Klasse ist die Vererbung. Vererbung in Java ist Einfachvererbung und mehrstufige Vererbung; eine Klasse kann nur eine Oberklasse erben, aber sie kann eine Großelternklasse haben.
(2) Unterschied 2: Member
a.成员变量 抽象类可以有成员变量,也可以有常量 接口只能有常量,默认修饰符public static final b.成员方法 抽象类可以有抽象方法,也可以有非抽象方法 接口只能有抽象方法,默认修饰符 public abstract c.构造方法 抽象类有构造方法,为子类提供 接口没有构造方法
1.8 Fallstudie: Sportler

1.8.1 Fallcode 4
Beispiel
2. Polymorphismus
2.1 Überblick über Polymorphismus
Polymorphismus ist das dritte Hauptmerkmal der objektorientierten Programmierung, nach Kapselung und Vererbung.
Reale Dinge weisen oft mehrere Formen auf. Zum Beispiel ist ein Student eine Art Person. Ein bestimmter Student, Zhang San, ist sowohl Student als auch Person und weist somit zwei Formen auf.
Java kann als objektorientierte Sprache ebenfalls mehrere Formen einer Sache beschreiben. Wenn beispielsweise die Klasse Student von der Klasse Person erbt, dann ist ein Student-Objekt sowohl ein Student als auch eine Person.
2.2 Definition und Verwendungsformat des Polymorphismus
Das Definitionsformat des Polymorphismus: Es ist tatsächlich so, dass eine Referenzvariable der Elternklasse auf ein Objekt der Kindklasse zeigt.
父类类型 变量名 = new 子类类型(); 变量名.方法名();
A: Format für Polymorphismus mit gewöhnlichen Klassen
父类 变量名 = new 子类();
Zum Beispiel:
class Fu {}
class Zi extends Fu {}
//类的多态使用
Fu f = new Zi();
B: Format für Polymorphismus mit abstrakten Klassen
抽象类 变量名 = new 抽象类子类();
Zum Beispiel:
abstract class Fu {
public abstract void method();
}
class Zi extends Fu {
public void method(){
System.out.println(“重写父类抽象方法”);
}
}
//类的多态使用
Fu fu= new Zi();
C: Format für Polymorphismus mit Schnittstellen
接口 变量名 = new 接口实现类();
Zum Beispiel:
interface Fu {
public abstract void method();
}
class Zi implements Fu {
public void method(){
System.out.println(“重写接口抽象方法”);
}
}
//接口的多态使用
Fu fu = new Zi();
2.2.1 Beispielcode
Beispiel
2.3 Eigenschaften polymorpher Member
A: Polymorphe Membervariablen
Wenn eine Membervariable mit demselben Namen sowohl in der Eltern- als auch in der Kindklasse vorkommt und Polymorphie diese Variable aufruft:
- Kompilierzeit: Es wird geprüft, ob die Klasse, zu der die Referenzvariable gehört, die aufgerufene Membervariable enthält. Wenn nicht, schlägt die Kompilierung fehl.
- Laufzeit: Es wird ebenfalls die Membervariable der Klasse aufgerufen, zu der die Referenzvariable gehört.
Einfache Eselsbrücke: Sowohl Kompilierung als auch Laufzeit beziehen sich auf die linke Seite des Gleichheitszeichens. Kompilierung und Laufzeit schauen beide auf die linke Seite.
B: Polymorphe Membermethoden
- Kompilierzeit: Es wird auf die Klasse verwiesen, zu der die Referenzvariable gehört; wenn die Klasse die aufgerufene Methode nicht enthält, schlägt die Kompilierung fehl.
- Laufzeit: Verweist auf die Klasse, zu der das Objekt gehört, auf das die Referenzvariable zeigt, und führt die Member-Methode der Klasse aus, zu der das Objekt gehört.
Kurz gesagt: Die Kompilierung schaut nach links, die Laufzeit schaut nach rechts.
2.3.1 Fallbeispiel-Code Sechs
Beispiel
2.4 多态中的向上转型和向下转型
多态中的类型转换分为两种:向上转型和向下转型:
A:向上转型:当将子类对象赋值给父类引用时,就是向上转型。多态本身就是向上转型的过程。
使用格式:
父类类型 变量名 = new 子类类型();
Zum Beispiel:
Person p = new Student();
B:向下转型:已经向上转型的子类对象可以使用强制类型转换格式,将父类引用转换为子类引用。这个过程就是向下转型。如果直接创建父类对象,则不能向下转型。
使用格式:
Subclass type variable name = (Subclass type) Parent class type variable;
Zum Beispiel:
Student stu = (Student) p; // 变量p 实际上指向 Student 对象
Beispiel
2.5 Vorteile und Nachteile der Polymorphie
Beispiel
Originaladresse: https://www.cnblogs.com/yoke/p/7453864.html