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();  }

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-Klasse

import java.util.Collection;  import java.util.HashMap;     public class Father {      public Collection say(HashMap map)      {          System.out.println("父类被执行...");          return map.values();      }  }
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

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

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.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Heiße Themen

PHP-Tutorial
1511
276
Python Argparse erforderte Argument -Beispiel Python Argparse erforderte Argument -Beispiel Aug 11, 2025 pm 09:42 PM

Bei der Verwendung des ArgParse -Moduls können die bereitgestellten Parameter erreicht werden, indem erforderlich ist. 1. Verwenden Sie erforderliche = treu, um optionale Parameter (z. B. -Eingabe) zu setzen, um erforderlich zu sein. Wenn dies bei der Ausführung des Skripts nicht bereitgestellt wird, wird ein Fehler gemeldet. 2. Positionsparameter sind standardmäßig erforderlich, und es ist nicht erforderlich, erforderlich zu sein, die erforderliche = true; 3.. Es wird empfohlen, Positionsparameter für die erforderlichen Parameter zu verwenden. Gelegentlich werden die optionalen Parameter von erforderlich = true verwendet, um die Flexibilität aufrechtzuerhalten. 4. Erforderlich = True ist der direkteste Weg, um Parameter zu steuern. Nach der Verwendung muss der Benutzer beim Aufrufen des Skripts entsprechende Parameter bereitstellen, da das Programm ansonsten einen Fehler auffordert und beendet.

Die besten IDES für Java -Entwicklung: eine vergleichende Überprüfung Die besten IDES für Java -Entwicklung: eine vergleichende Überprüfung Aug 12, 2025 pm 02:55 PM

Thebestjavaidein2024Dependyourneeds: 1.CHOOSEINTELLIJIDEAFORPROFESSIONAL, ENTERPRISE, Orull-StackDevelopmentDuetoitsSuperiorCodeIntelligence, Frameworkintegration, andtooling.2. Useclipseforhoxhensibilsibsibilität, LegacyPro-Eigenschaften, oderweigte, oderweigende, oderweilen, oderweilen, orwhenopenen-seourzatioten, legacyprojekts, orwhenopenen-seourzatioten, legacyprojekts, orwhenopenen-seourcatiatiox

Was sind Kommentare in Java? Was sind Kommentare in Java? Aug 12, 2025 am 08:20 AM

KommentarinjavareignedByTheCompilerandusedForExplanation, Notizen, ordisablingcode.therearethreetypes: 1) Single-Linde-Deals startwith // und Lastuntiltheendoftheline; 2) Multi-Linde-Bingin-Dokumentation und-undcantranmultipline; 3) Dokumentation

Wie man Saiten in Java vergleicht Wie man Saiten in Java vergleicht Aug 12, 2025 am 10:00 AM

Verwenden Sie .Equals (), um den String -Inhalt zu vergleichen, da == nur Objektreferenzen und nicht tatsächliche Zeichen vergleichen; 2. Verwenden Sie .EqualSignoreCase () beim Vergleich des Ignorierens; 3.. Verwenden Sie .Compareto () bei alphabetisch sortierender und comparetoignorecase (), wenn Sie den Fall ignorieren; 4. Vermeiden Sie es, Strings anzurufen, die möglicherweise null sein können. Equals () sollte verwendet werden, um "buchstäblich" .Eequals (Variable) oder Objekte zu verwenden. Ausgleiche (STR1, STR2), um Nullwerte sicher zu verarbeiten; Kurz gesagt, achten Sie immer eher auf den Vergleich des Inhalts als auf Referenz,

So verwenden Sie die HTTPClient -API in Java So verwenden Sie die HTTPClient -API in Java Aug 12, 2025 pm 02:27 PM

Der Kern der Verwendung des Javahttpclientapi besteht darin, einen Httpclient zu erstellen, einen httprequest zu erstellen und httPesponse zu verarbeiten. 1. Verwenden Sie httpclient.newhttpclient () oder httpclient.newbuilder (), um Zeitüberschreitungen, Proxy usw. zu konfigurieren, um Clients zu erstellen. 2. Verwenden Sie httprequest.newbuilder (), um URI, Methode, Kopfzeile und Körper zu setzen, um Anfragen zu erstellen. 3.. Senden Sie synchrone Anfragen über Client.send () oder asynchrone Anfragen über Client.sendasync (); 4. Verwenden Sie Bodyhandlers.Ofstr

Was ist eine Linkedlist in Java? Was ist eine Linkedlist in Java? Aug 12, 2025 pm 12:14 PM

LinkedList ist eine bidirektionale verknüpfte Liste in Java, die Liste und Deque -Schnittstellen implementiert. Es ist für Szenarien geeignet, in denen häufig Elemente eingefügt und gelöscht werden. Insbesondere beim Betrieb an beiden Enden der Liste hat es eine hohe Effizienz, aber die Zufallszugriffsleistung ist schlecht und die Zeitkomplexität ist O (N). Einfügen und Löschen können O (1) an bekannten Stellen erreichen. Daher ist es geeignet, Stapel, Warteschlangen oder Situationen zu implementieren, in denen Strukturen dynamisch modifiziert werden müssen, und eignet sich nicht für readintensive Operationen, die häufig nach Index zugreifen. Die endgültige Schlussfolgerung ist, dass die LinkedList besser als ArrayList ist, wenn sie häufig geändert wird, aber weniger Zugriffe hat.

Fix: Ethernet 'Nicht identifiziertes Netzwerk' Fix: Ethernet 'Nicht identifiziertes Netzwerk' Aug 12, 2025 pm 01:53 PM

RestartyourRouterandComputertoresolvetemporaryglitches.2.RunthenetworkrouBleshooterviathesystemTraytoAutomaticFixCommonissues.3.RewhewIpadDressusesusesusesusesuSuseingCommandpromptasadMinistratorByRunningipconfig/Release, Ipconfig/Reufreset und Netshwinset und Netschon/Rufe, Netshwinset und Netshwinset und NETSHNE und NETSETH und NETSETH und NETHN

Rand nicht retten Geschichte Rand nicht retten Geschichte Aug 12, 2025 pm 05:20 PM

Erstens, check "clearBrowsingDataonclose" isturnedoninsettingsandTurnitofftoensurehistoryISSAVE.2.

See all articles