Dieser Artikel ist ein Memorandum. Obwohl es sich um einen Inhalt auf Referenzebene handelt, lautet der in diesem Artikel zu veröffentlichende Code ** Falsch ** sind die Hauptsachen. Dies dient dazu, den Teil zu veröffentlichen, der beim Codieren tatsächlich falsch war, und ihn 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
Es gibt einen Mechanismus namens ** Schnittstelle **, der ähnlich wie die ** abstrakte Klasse ** verwendet wird, die beim letzten Mal behandelt wurde. Die abstrakte Klasse war eine Art Klasse, und die Schnittstelle wurde für denselben Zweck erstellt, aber die Deklarations- und Implementierungsmethode ist unterschiedlich.
declareInterface.java
interface Felidae
{
String type = cats;
void meetsCats();
}
Die übliche class
Deklaration ist weg und wird durch interface
ersetzt. Wie eine Klasse kann sie Felder und Methoden haben (** es kann keinen Konstruktor geben **),
** Objekte wie Felidae cat = new Felidae ();
können nicht erstellt werden **. Da "void meets Cats ()" eine abstrakte Methode ist, ist es außerdem erforderlich, eine konkrete Methode durch die Klasse vorzubereiten, die die Felidae-Schnittstelle implementiert (Override).
String type = cat;
ist ein Schnittstellenfeld, dies ist jedoch eine ** Konstante ** und kann nicht geändert werden. Dies liegt daran, dass sich die Felder in der Schnittstelle im selben Zustand wie bei "public static final" befinden (ich weiß immer noch nicht warum).
inplementedFlidae.java
class Housecat inplements Felidae
{
void meetsCats()
{
System.out.println("Ich habe eine Katze gefunden. Ich denke, es ist irgendwo eine Hauskatze.");
}
}
Anstelle der Erweiterung "erweitert" handelt es sich um "implementiert", aber die Form ist dieselbe wie zuvor.
Warum brauchen wir eine abstrakte Methodenschnittstelle? Ich würde gerne alles mit Klassenerweiterungen machen, aber Java ** erlaubt keine Mehrfachvererbung durch mehrere Klassen **. Es gibt nur eine übergeordnete Oberklasse. Es scheint, dass Sie nicht so denken sollten wie das Systemdiagramm, das Menschen denken. Ich habe ein wenig über den Grund gesehen, aber es scheint, dass es hier eine gewisse Tiefe gibt, wie den Aufruf, wenn der Methodenname getragen wird, und das Diamantproblem. Eine andere Sprache, "C ++", ermöglicht diese Mehrfachvererbung.
Es ist jedoch schwierig, das, was Sie einmal vorbereitet haben, zu verwenden. Anstelle der Mehrfachvererbung durch Klassen versuchen wir daher, die Einfachheit als Sprache beizubehalten, indem wir nur eine teilweise Mehrfachvererbung durch abstrakte Klassen und Schnittstellen zulassen. ** Die Implementierung der Schnittstelle kann mit zwei oder mehr ** erfolgen. Sie können auch die Schnittstelle selbst erweitern und Superschnittstellen auf Subschnittstellen erweitern.
Wenn ich mir den Teil anschaue, in dem die Vererbung durch Erweiterung zulässig ist, denke ich, dass Java eine Sprache ist, die sich gut für die beschreibende Entwicklung eignet. Wenn Sie die bereits abgeschlossene Klassenschnittstelle kennen und davon ausgehen, dass Sie eine neue Klasse erstellen, während Sie ihre Funktionen erben, beginnen Sie mit dem Studium von Java, indem Sie zunächst die Funktionen der Standardbibliothek kennen.
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