Was ist das Liskov-Substitutionsprinzip von Java-Entwurfsmustern?
Liskov-Substitutionsprinzip, auch LSP genannt
Definition:
Funktionen, die Zeiger oder Referenzen auf Basisklassen verwenden, müssen in der Lage sein, Objekte abgeleiteter Klassen zu verwenden, ohne es zu wissen.
Alle Referenzen auf Basisklassen müssen in der Lage sein, ihre zu verwenden Unterklassenobjekte transparent darstellen.
Mit anderen Worten: Solange die übergeordnete Klasse angezeigt wird, kann die untergeordnete Klasse angezeigt werden, und das Ersetzen durch eine untergeordnete Klasse führt zu keinen Fehlern oder Ausnahmen. Aber umgekehrt kann es dort, wo Unterklassen auftreten, zu Problemen kommen, wenn sie durch übergeordnete Klassen ersetzt werden.
Dieses Prinzip besteht darin, eine Spezifikation für eine gute Vererbung zu definieren. Es hat 4 Bedeutungsebenen:
1. Die Unterklasse muss die Methoden der übergeordneten Klasse vollständig implementieren.
Definieren Sie eine abstrakte Klasse Folgende zwei Klassen dienen dazu, diese abstrakte Klasse zu implementieren
public abstract class ViewPoint { //去丽江旅游 public abstract void where(); }
Der Charakter ist Tutu und legt den darin enthaltenen Klassentyp so fest, dass Parameter übergeben werden. Zu diesem Zeitpunkt sind die Touristenattraktionen, die Tutu besuchen möchte, noch abstrakte
public class Lijiang extends ViewPoint { @Override public void where() { System.out.println("欢迎来到丽江..."); } } public class Zhangjiajie extends ViewPoint { @Override public void where() { System.out.println("欢迎来到张家界..."); } }
Szenarien. Legen Sie die spezifischen Attraktionen fest, zu denen Sie gehen möchten die Unterklasse der Klasse. In der Klasse können Sie andere Methoden oder Attribute definieren.
3 Beim Überschreiben oder Implementieren der Methoden der übergeordneten Klasse können die Eingabeparameter erweitert werden. Wo die übergeordnete Klasse vorhanden sein kann, ist die Unterklasse kann vorhanden sein und hat keinen Einfluss auf die laufenden Ergebnisse. Es gibt Änderungen. Das Gegenteil ist nicht der Fall. Übergeordnete Klasse, der Parameter in say() ist vom Typ HashMap, einem Untertyp des Typs Map. (Da der Umfang der Unterklasse größer sein sollte als der der übergeordneten Klasse)public class Tutu { //定义要旅游的景点 private ViewPoint viewpoint; //涂涂要去的景点 public void setViewPoint(ViewPoint viewpoint) { this.viewpoint = viewpoint; } public void travelTo() { System.out.println("涂涂要去旅游了"); viewpoint.where(); } }
Für die Unterklasse werden die Parameter in say() zum Map-Typ. Der Map-Bereich ist größer als der HashMap-Typ, was mit dem LSP übereinstimmt Prinzip. Beachten Sie, dass das Sagen hier das Sagen der übergeordneten Klasse nicht überschreibt, da die Parametertypen unterschiedlich sind. Aber Überlastung.
public class Sence { public static void main(String args[]) { Tutu tutu = new Tutu(); //设置要去的旅游景点 tutu.setViewPoint(new Lijiang()); tutu.travelTo(); } }
Scene-Klasseimport java.util.Collection; import java.util.HashMap; public class Father { public Collection say(HashMap map) { System.out.println("父类被执行..."); return map.values(); } }
Wenn jedoch der say-Parameter in Father oben in Map geändert wird, Ändern Sie den Parameter say in der Unterklasse Son in HashMap, und das Ergebnis wird zu
f.say(map) Ergebnis: Die übergeordnete Klasse wird ausgeführt...s.say(map) Ergebnis: Die Unterklasse wird ausgeführt ..
Dies führt zu logischer Verwirrung. Daher müssen die Vorbedingungen der Methoden in der Unterklasse gleich oder umfassender als die überschriebenen Vorbedingungen in der übergeordneten Klasse sein.
4. Beim Überschreiben oder Implementieren der Methode der übergeordneten Klasse kann das Ausgabeergebnis reduziert werdenTatsächlich ist es ähnlich wie oben, das heißt, die Unterklasse kann dort erscheinen, wo die übergeordnete Klasse erscheinen kann, und Das Ersetzen durch eine Unterklasse führt nicht zu Fehlern oder Ausnahmen. Der Benutzer muss nicht wissen, ob es sich um eine übergeordnete Klasse oder eine Unterklasse handelt. Aber das Gegenteil ist nicht der Fall, wo Unterklassen auftreten, die übergeordnete Klasse kann sich möglicherweise nicht anpassen. (Schließlich muss der Umfang der Unterklasse >= der Umfang der übergeordneten Klasse sein)
Das obige ist der detaillierte Inhalt vonWas ist das Liskov-Substitutionsprinzip von Java-Entwurfsmustern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.
