Heim Java javaLernprogramm Was ist das Liskov-Substitutionsprinzip von Java-Entwurfsmustern?

Was ist das Liskov-Substitutionsprinzip von Java-Entwurfsmustern?

Apr 18, 2023 pm 04:31 PM
java

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();  }
Nach dem Login kopieren

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("欢迎来到张家界...");      }     }
Nach dem Login kopieren

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();      }  }
Nach dem Login kopieren

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();      }  }
Nach dem Login kopieren

Scene-Klasse

import java.util.Collection;  import java.util.HashMap;     public class Father {      public Collection say(HashMap map)      {          System.out.println("父类被执行...");          return map.values();      }  }
Nach dem Login kopieren
Ob die Say-Methode mit der übergeordneten Klasse oder der Unterklasse aufgerufen wird, das Ergebnis ist, dass die übergeordnete Klasse ausgeführt wird ...

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 werden

Tatsä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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

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

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

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

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

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

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

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.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

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

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

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.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

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

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

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.

See all articles