Java-objektorientiert: Hier organisieren wir das Grundkenntnis von Objektorientierten, um jedem zu helfen, zu lernen und zu verstehen. Ich hoffe, es kann allen helfen. Hier sind das relevante Wissen, das auf der Grundlage von Unternehmensinterviewinformationen zusammengestellt wurde:
Der Unterschied zwischen Überlast und Überschreibung. Kann die überlastete Methode den Typ des Rückgabewerts ändern?
Überladung bedeutet Überlast und Überschreibung bedeutet überschreibt, das heißt, neu zu schreiben. Überladung Überladung bedeutet, dass es in derselben Klasse mehrere Methoden mit demselben Namen geben kann, aber die Parameterlisten dieser Methoden sind unterschiedlich (d. H. Die Anzahl oder die Art der Parameter sind unterschiedlich).
Umschreiben von Override bedeutet, dass die Methode in der Unterklasse genau dem Namen und Parameter einer Methode in der übergeordneten Klasse entspricht. Wenn diese Methode durch das von der Unterklasse erstellte Instanzobjekt aufgerufen wird, wird die Definitionsmethode in der Unterklasse aufgerufen, was dem Überschreiben der in der übergeordneten Klasse definierten genau die gleiche Methode entspricht. Dies ist auch eine Manifestation des Polymorphismus der objektorientierten Programmierung.
Override kann als Override übersetzt werden. Wie Sie buchstäblich wissen können, überschreibt es eine Methode und schreibt sie neu, um unterschiedliche Funktionen zu erzielen. Die bekannteste Überschreibung für uns ist die Implementierung von Schnittstellenmethoden. In einer Schnittstelle wird die Methode im Allgemeinen deklariert, und wenn wir sie implementieren, müssen wir alle Methoden der Schnittstellenerklärung implementieren. Zusätzlich zu dieser typischen Verwendung können wir auch Methoden in der Elternklasse in der Vererbung überschreiben. Die folgenden Punkte sollten während der Berichterstattung beachtet werden:
1. Das Logo der Overlay -Methode muss genau mit dem Logo der Overlay -Methode übereinstimmen, um den Effekt von Overlay zu erreichen.
2. Der Rückgabewert der überschriebenen Methode muss mit der Rückgabe der überschriebenen Methode übereinstimmen.
A.
V.
Überladung kann als Überladung übersetzt werden, was bedeutet, einige Methoden mit demselben Namen zu definieren, indem diese Methoden durch Definieren verschiedener Eingabeparameter unterschieden werden. Wenn die VM aufgerufen wird, wählt die VM die entsprechende Methode zur Ausführung nach verschiedenen Parameterstilen aus. Achten Sie bei der Verwendung von Überladungen bitte auf die folgenden Punkte:
1. Bei der Verwendung von Überladung können Sie nur verschiedene Parameterstile übergeben. Beispielsweise müssen verschiedene Parametertypen, unterschiedliche Anzahl von Parametern und unterschiedliche Parameteraufträge (natürlich mehrere Parametertypen in derselben Methode unterschiedlich sein, beispielsweise kann es Spaß machen (int, float), aber es kann nicht Spaß machen (int, int)).
2. kann nicht durch Zugriffsberechtigungen, Rückgabetypen und geworfene Ausnahmen überlastet werden.
3. Die Ausnahmetyp und die Anzahl der Methoden wirken sich nicht auf die Überladung aus.
4. Wenn die Erbschaft eine Methode in der übergeordneten Klasse auf Zugriffsrechte hat und Priavte ist, kann sie nicht in der Unterklasse überlastet werden. Wenn es definiert ist, definiert es nur eine neue Methode und erreicht den Effekt der Überlastung nicht.
Wenn die Parameterliste mehrerer überlasteter Methoden unterschiedlich ist, können ihre Rückgabetypen unterschiedlich sein. Wenn die Parameterliste der beiden Methoden genau gleich ist, kann die Überladung der Überladung nicht durch unterschiedliche Rückgabewerte erreicht werden. Wir können die reverse Proof -Methode verwenden, um dieses Problem zu veranschaulichen. Wenn wir beispielsweise die Methode MAP.Remove (Schlüssel) aufrufen, definieren wir jedoch die Variable, die das Rückgabeergebnis empfängt, in der Regel nicht die Variable. Unter der Annahme, dass es in dieser Klasse zwei Methoden mit genau der gleichen Namen und Parameterliste gibt, kann Java nicht bestimmen, welche Methode der Programmierer anrufen möchte, da er nicht durch Rückgabe des Ergebnistyps beurteilt werden kann.
Kann der Konstruktor überschrieben werden?
Der Konstruktorkonstruktor kann nicht vererbt werden, daher kann Override nicht überschrieben werden, aber Überlast kann überladen werden.
Kann eine Schnittstelle vererbt werden? Kann eine abstrakte Klasse eine Schnittstelle implementieren? Kann eine abstrakte Klasse die konkrete Klasse erben? Kann eine abstrakte Klasse existieren? Kann eine abstrakte Klasse eine statische Hauptmethode in einer abstrakten Klasse haben?
Schnittstellen können Schnittstellen erben. Abstrakte Klassen können Grenzflächen implementieren (implementiert). Es kann statische Hauptmethoden in abstrakten Klassen geben.
Der einzige Unterschied zwischen abstrakten Klassen und gewöhnlichen Klassen besteht darin, dass sie keine Instanzobjekte erstellen und abstrakte Methoden zulassen können.
Beim Schreiben der Clone () -Methode gibt es normalerweise eine Codezeile. Was ist das?
Die Clone () -Methode besteht darin, zu klonen, was bedeutet, das Objekt zu kopieren; Das heißt, es gibt bereits Objekt A, wobei A einige gültige Werte enthält, aber wenn Sie ein Objekt B haben möchten, und Änderungen an B den Wert in A nicht beeinflussen, aber B ist kein neues Objekt, das neu ist.
Kopieren: ① Das Kopieobjekt gibt ein neues Objekt zurück, keine Referenz. ② Der Unterschied zwischen dem Kopieren eines Objekts und dem mit dem neuen Bediener zurückgegebenen Objekt besteht darin, dass die Kopie bereits die Informationen des ursprünglichen Objekts enthält und nicht die ersten Informationen des Objekts.
Clone hat ein Standardverhalten, Super.clone (); Denn zuerst müssen die Mitglieder in der Elternklasse kopiert werden, und dann werden die Mitglieder davon kopiert.
Was sind die Aspekte von objektorientierten Merkmalen?
Objektorientierte Programmiersprachen enthalten vier Hauptmerkmale: Kapselung, Vererbung, Abstraktion und Polymorphismus.
1 Paket:
Die Verpackung ist die Grundlage dafür, dass Softwarekomponenten eine hervorragende Modularität aufweisen. Das Ziel der Verpackung ist es, "hohe Zusammenhalt und niedrige Kopplung" von Softwarekomponenten zu erreichen, um die durch die Interdependenz der Programm verursachten Änderungen zu verhindern. In objektorientierten Programmiersprachen sind Objekte die grundlegendste Einheit der Kapselung, und objektorientierte Kapselung ist klarer und leistungsfähiger als die herkömmliche Sprachkapselung. Die objektorientierte Kapselung besteht darin, den Code, der die Eigenschaften und das Verhalten eines Objekts in einem "Modul" beschreibt, dh in einer Klasse, zu Kapitulation. Die Eigenschaften werden durch Variablen definiert und das Verhalten wird durch Methoden definiert. Die Methode kann direkt auf die Eigenschaften im selben Objekt zugreifen. Denken Sie im Allgemeinen nur daran, die Variable und die Methode des Zugriffs auf diese Variable zusammenzustellen, alle Mitgliedsvariablen in einer Klasse als privat zu definieren, und nur die eigenen Methoden der Klasse können auf diese Mitgliedsvariablen zugreifen, was im Grunde die Einkapselung des Objekts implementiert. Greifen Sie ein Prinzip: Geben Sie die Methoden und verwandten Methoden, die in derselben Klasse dasselbe arbeiten, und setzen Sie die Methoden und die Daten, die in derselben Klasse arbeiten.
2. Zusammenfassung:
Die Abstraktion besteht darin, die Ähnlichkeiten und Gemeinsamkeiten einiger Dinge herauszufinden und sie dann in eine Klasse zu klassifizieren, die nur die Ähnlichkeiten und Gemeinsamkeiten dieser Dinge berücksichtigt und Aspekte ignoriert, die nicht mit dem aktuellen Thema und Ziel zusammenhängen, und sich auf Aspekte konzentrieren, die mit dem aktuellen Ziel zusammenhängen. Zum Beispiel eine Ameise und einen Elefanten und Sie können sich vorstellen, wie sie sind, das ist eine Abstraktion. Abstraktion umfasst zwei Aspekte: Verhaltensabstraktion und Zustandsabstraktion. Definieren Sie beispielsweise eine Personklasse wie folgt:
Klasse Person {String Name; int Alter; } Menschen sind ursprünglich sehr komplexe Dinge und haben viele Aspekte, aber da das aktuelle System nur den Namen und das Alter einer Person verstehen muss, enthält die oben definierte Klasse nur die Attribute von Namen und Alter. Dies ist eine Abstraktion. Die Verwendung von Abstraktion kann vermeiden, einige Details zu berücksichtigen, die nicht mit dem Ziel zusammenhängen.
3. Vererbung:
Beim Definieren und Implementieren einer Klasse kann sie basierend auf einer vorhandenen Klasse erfolgen, und der von der vorhandene Klasse definierte Inhalt wird als eigener Inhalt angesehen, und es können mehrere neue Inhalte hinzugefügt werden, oder die ursprüngliche Methode kann geändert werden, um sie für besondere Anforderungen geeigneter zu machen. Dies ist Vererbung. Die Vererbung ist ein Mechanismus, durch den Unterklassen automatisch übergeordnete Klassendaten und -methoden teilen. Dies ist eine Beziehung zwischen Klassen, die die Wiederverwendbarkeit und Skalierbarkeit von Software verbessert.
4 Polymorphismen:
Der Polymorphismus bezieht sich auf den spezifischen Typ, auf den durch die im Programm definierte Referenzvariable gezeigt wird, und die durch die Referenzvariablen ausgegebenen Methodenaufrufe werden während der Programmierung nicht ermittelt, sondern während des Programms des Programms, dh, auf welches Klasseninstanzobjekt Ein Referenzvariable zeigt, auf das eine Referenzvariable zeigt und auf welche Klassenmethodenaufrufe, die durch die Referenzvariable ausgegeben wurden, implementiert werden, werden nur während des Programms ausgegeben. Da die spezifische Klasse nur dann ermittelt wird, wenn das Programm ausgeführt wird, können die Referenzvariablen an verschiedene Klassenimplementierungen gebunden werden, ohne den Quellprogrammcode zu ändern, was zur spezifischen Methode des Referenzaufrufs entsprechend geändert wird. Das heißt, der spezifische Code, der an den Programmlauf gebunden ist, ohne den Programmcode zu ändern, damit das Programm mehrere laufende Zustände auswählen kann, was der Polymorphismus ist. Der Polymorphismus verbessert die Flexibilität und Skalierbarkeit der Software. Beispielsweise ist der UserDao im folgenden Code eine Schnittstelle, auf die das Instanzobjekt definiert, auf das die Referenzvariable UserDao angezeigt wird und bei Ausführung von Daofactory.getDao () zurückgegeben wird. Manchmal weist es auf die Implementierung von UserJdbcdao und manchmal auf die Implementierung von UserHiberNatedao hin. Auf diese Weise können Sie die von UserDao angezeigte spezifische Klassenimplementierung ändern, ohne den Quellcode zu ändern, was zum spezifischen Code der userDAO.Insertuser () -Methode führt. Das heißt, manchmal wird es als InsertUser -Methode von UserJdbcdao bezeichnet und manchmal wird die InsertUser -Methode von UserHiberNatedao bezeichnet:
UserDao userDao = daofactory.getDao (); userDao.insertuser (Benutzer);
Was ist der Mechanismus zur Umsetzung von Polymorphismus in Java?
Die durch die übergeordnete Klasse oder Schnittstelle definierte Referenzvariable kann auf das Instanzobjekt der Unterklasse oder der konkreten Implementierungsklasse verweisen, und die vom Programm aufgerufene Methode ist während der Laufzeit dynamisch gebunden. Es ist die Methode, die sich auf das spezifische Instanzobjekt bezieht, auf das die Variable, dh die Methode des Objekts, das im Speicher ausgeführt wird, und nicht die im Typ der Referenzvariablen definierte Methode.
Was ist der Unterschied zwischen abstrakter Klasse und Schnittstelle?
Eine Klasse mit abstraktem Modifikator ist eine abstrakte Klasse, ein Instanzobjekt, das nicht von der abstrakten Klasse erstellt werden kann. Klassen, die abstrakte Methoden enthalten, müssen als abstrakte Klasse definiert werden, und Methoden in abstrakten Klassenklassen müssen nicht abstrakt sein. Die Definition abstrakter Methoden in der abstrakten Klasse muss in der konkreten Unterklasse implementiert werden, sodass es keine abstrakten Konstrukteure oder abstrakte statische Methoden geben kann. Wenn die Unterklasse nicht alle abstrakten Methoden in der abstrakten Elternklasse implementiert, muss die Unterklasse auch als abstrakter Typ definiert werden.
Eine Schnittstelle kann als Sonderfall einer abstrakten Klasse bezeichnet werden, und alle Methoden in einer Schnittstelle müssen abstrakt sein. Die Methodendefinition in der Schnittstelle standardmäßig zum öffentlichen Abstrakten Typ und der Mitgliedsvariablentyp in der Schnittstelle standardmäßig zum öffentlichen statischen Finale.
Der grammatikalische Unterschied zwischen den beiden:
1. Zusammenfassung Klassen können Konstruktionsmethoden haben, jedoch nicht in Schnittstellen.
2. Es kann in abstrakten Klassen gewöhnliche Mitgliedsvariablen geben, aber es gibt keine gewöhnlichen Mitgliedsvariablen in der Schnittstelle.
3.. Abstract-Klassen können nicht abstrakte normale Methoden enthalten. Alle Methoden in der Schnittstelle müssen abstrakt sein und es können nicht abstrakte normale Methoden vorliegen.
4. Die Zugriffstypen abstrakter Methoden in abstrakten Klassen können öffentlich, geschützt sein und (der Standardtyp, obwohl es keinen Fehler in der Eclipse gibt, sollte es nicht funktionieren), aber die abstrakten Methoden in der Schnittstelle können nur vom Typ öffentlich sein, und der Standard ist der öffentliche abstrakte Typ.
5. Abstrakte Klassen können statische Methoden enthalten, Schnittstellen können jedoch keine statischen Methoden enthalten.
6. Sowohl abstrakte Klassen als auch Schnittstellen können statische Elementvariablen enthalten. Der Zugriffstyp statischer Mitgliedsvariablen in abstrakten Klassen kann willkürlich sein, aber die in der Schnittstelle definierten Variablen können nur öffentlich statische endgültige Art sein, und der Standard ist der öffentliche statische Endtyp.
7. Eine Klasse kann mehrere Schnittstellen implementieren, aber nur eine abstrakte Klasse erben.
Der Unterschied zwischen den beiden in der Anwendung:
Schnittstellen spielen eine Rolle bei Systemarchitektur -Designmethoden, die hauptsächlich zur Definition von Kommunikationsverträgen zwischen Modulen verwendet werden. Abstrakte Klassen spielen eine Rolle bei der Codeimplementierung und können die Wiederverwendung von Code realisieren. Beispielsweise ist das Entwurfsmuster der Vorlagenmethode eine typische Anwendung abstrakter Klassen. Unter der Annahme, dass alle Servletklassen in einem bestimmten Projekt dieselbe Methode verwenden müssen, um Erlaubnisurteile zu fällen, Zugriffsprotokolle aufzunehmen und Ausnahmen zu behandeln, können Sie eine abstrakte Basisklasse definieren, damit alle Servlets diese abstrakte Basisklasse erben, die Erlaubnisbeurteilungen vervollständigen, die Beurteilung von Zugriffsprotokollen aufzeichnen und die Ausnahmen in jeder Subclet -Methode nur ausfüllen. Der Pseudo-Code lautet wie folgt:
public abstract Class BaseServlet erweitert HttpServlet {public Final Void Service (httpServletRequest -Anforderung, HttpServletResponse -Antwort) IOExcetion, ServleTException {Datensatzzugriffszugriffs -Log für die Erlaubnisbeurteilung (mit Genehmigung) {Try {DOSERTRICE (Record); doService (httpServletRequest Request, httpServletResponse -Antwort) löst eine IOExcetion, servletException aus; // beachtenEin bestimmtes Stück Code in der Mitte der übergeordneten Klassenmethode ist ungewiss. Daher überlasse ich es der Unterklasse, daher verwende ich die Vorlagenmethode, um das Muster zu entwerfen.
Kann abstrakte Methode gleichzeitig statisch sein, kann sie gleichzeitig nativ sein und kann gleichzeitig synchronisiert werden?
Die Zusammenfassung der Zusammenfassung kann nicht statisch sein, da abstrakte Methoden durch Unterklassen implementiert werden müssen und statisch nichts mit Unterklassen zu tun hat!
Die native Methode bedeutet, dass die Methode in einer anderen plattformabhängigen Programmiersprache implementiert werden muss, und es gibt kein Problem der Implementierung von Unterklassen, sodass sie nicht abstrakt sein kann und nicht mit Abstract gemischt werden kann. Beispielsweise muss die DateiOutputSteam-Klasse mit Hardware behandelt werden, und die zugrunde liegende Implementierung verwendet die implementierenden API-Implementierungen des Betriebssystems. Zum Beispiel wird es in C -Sprache in Windows implementiert. Wenn Sie den Quellcode von JDK betrachten, können Sie daher feststellen, dass die Definition der offenen Methode von FileOutputStream wie folgt ist: Private native void offene (String -Name) löscht FilenotFoundException aus;
Wenn wir Java verwenden möchten, um die von anderen geschriebene C -Sprachfunktion aufzurufen, können wir sie nicht direkt anrufen. Wir müssen eine C -Sprachfunktion nach den Anforderungen von Java schreiben, und unsere C -Sprachfunktion wird die C -Sprachfunktionen anderer Personen aufrufen. Da unsere C -Sprachfunktion nach den Anforderungen von Java geschrieben ist, kann unsere C -Sprachfunktion mit Java verbunden werden. Die Docking -Methode auf Java besteht darin, die Methode zu definieren, die unserer C -Funktion entspricht. Die entsprechenden Methoden in Java müssen keinen spezifischen Code schreiben, aber native muss früher deklariert werden.
Für synchronisiert ist das durch synchronisierte Synchronisation auf der Methode verwendete Synchronisationsschlossobjekt und die abstrakte Methode kann nicht bestimmen, was dies ist.
Was ist eine interne Klasse? Die statische verschachtelte Klasse unterscheidet sich von der inneren Klasse.
Eine interne Klasse ist eine Klasse, die in einer Klasse definiert ist. Statische Mitglieder können nicht in einer internen Klasse definiert werden. Statische Mitglieder sind nicht die Eigenschaften eines Objekts. Sie müssen nur einen Ort zum Leben finden, also müssen sie in eine Klasse platziert werden. Die interne Klasse kann in der externen Klasse direkt auf Mitgliedervariablen zugreifen. Die interne Klasse kann außerhalb der Methoden der externen Klasse oder im Methodenkörper der externen Klasse definiert werden, wie unten gezeigt:
öffentliche Klasse äußere {int out_x = 0; public void method () {inner1 inner1 = new Inner1 (); öffentliche Klasse Inner2 // Innere Klasse in der Methode Body {public methode () {out_x = 3; }} Inner2 inner2 = new Inner2 (); } öffentliche Klasse Inner1 // Innere Klasse außerhalb der Methode Body {}} definiert Die Zugangstypen der außerhalb des Verfahrensgremiums definierten inneren Klasse können öffentlich, geschützt und standardmäßig privat sein. Dies ist wie in den in der Klasse definierten Mitgliedsvariablen 4 Zugriffstypen, die feststellen, ob die Definition der inneren Klasse für andere Klassen sichtbar ist. In diesem Fall können wir auch ein Instanzobjekt der inneren Klasse außerhalb erstellen. Beim Erstellen eines Instanzobjekts der inneren Klasse müssen wir zunächst ein Instanzobjekt der äußeren Klasse erstellen und dann das Instanzobjekt der äußeren Klasse verwenden, um ein Instanzobjekt der inneren Klasse zu erstellen. Der Code ist wie folgt:
Äußere äußere = new outer ();
Outer.Inner1 inner1 = äußere.new innner1 ();
Vor der in der Methode definierten inneren Klasse können keine Zugriffsmodifikatoren vorhanden sein, genau wie lokale Variablen, die in der Methode definiert sind, aber die endgültigen oder abstrakten Modifikatoren können vor der inneren Klasse verwendet werden. Diese innere Klasse ist für andere Klassen nicht sichtbar und kann nicht auf diese innere Klasse verweisen, aber die von dieser inneren Klasse erstellten Instanzobjekte können an andere Klassen übergeben werden, um zugreifen zu können. Diese Art von interner Klasse muss zuerst definiert und dann verwendet werden, dh der Definitionscode der internen Klasse muss vor der Verwendung der Klasse erscheinen. Dies ist das gleiche wie das Prinzip, dass lokale Variablen in der Methode zuerst definiert und dann verwendet werden müssen. Diese innere Klasse kann in der Methodenkörper auf lokale Variablen zugreifen, aber der endgültige Modifikator muss vor der lokalen Variablen hinzugefügt werden.
In der Methode -Körperschaft kann die folgende Syntax verwendet werden, um eine anonyme innere Klasse zu erstellen, dh bei der Definition einer bestimmten Schnittstelle oder Unterklasse einer Klasse wird auch ein Instanzobjekt der Unterklasse erstellt, ohne einen Namen für die Unterklasse zu definieren:
öffentliche Klasse äußere {public void start () {neuer Thread (new Runable () {public void run () {};}). start (); }} Schließlich können Sie die außerhalb der Methode definierte innere Klasse zum Hinzufügen eines statischen Keywords zur statischen verschachtelten Klasse hinzufügen. Es hat nicht mehr die Eigenschaften einer inneren Klasse. Alles, im engen Sinne, ist keine innere Klasse. Die statische verschachtelte Klasse unterscheidet sich nicht im Verhalten und der Funktion normaler Klassen zur Laufzeit, aber es gibt einige Unterschiede in der Syntax bei der Programmierreferenzen. Es kann als öffentliche, geschützte, standardmäßige, private und andere Typen definiert werden, während gewöhnliche Klassen nur als öffentliche und Standardtypen definiert werden können. Der Name der statischen verschachtelten Klassenklasse außerhalb lautet "Name des externen Klassennamens. Sie können eine statische verschachtelte Klasse direkt erstellen, ohne ein Instanzobjekt einer externen Klasse außerhalb zu erstellen. Wenn es beispielsweise eine statische verschachtelte Klasse ist, die in der äußeren Klasse definiert ist, können Sie die folgende Anweisung verwenden, um die innere Klasse zu erstellen:
Äußere.innner inner = new outer.inner ();
Da die statische verschachtelte Klasse nicht auf Instanzobjekte externer Klassen beruht, kann die statische verschachtelte Klasse auf nicht statische Mitgliedsvariablen externer Klassen zugreifen. Wenn Sie in einer externen Klasse auf statische verschachtelte Klasse zugreifen, können Sie den Namen der statischen verschachtelten Klasse direkt verwenden, ohne den Namen der externen Klasse hinzuzufügen. In der statischen verschachtelten Klasse können Sie auch direkt auf die statischen Mitgliedsvariablen der externen Klasse verweisen, ohne den Namen der externen Klasse hinzuzufügen.
Die in einer statische Methode definierte innere Klasse ist ebenfalls eine statische verschachtelte Klasse. Zu diesem Zeitpunkt können Sie das statische Schlüsselwort vor der Klasse nicht hinzufügen. Die statische verschachtelte Klasse in einer statischen Methode ist der Anwendungsmethode der inneren Klasse bei normalen Methoden sehr ähnlich. Zusätzlich zum direkten Zugriff auf die statischen Mitgliedsvariablen in der externen Klasse kann es auch in der statischen Methode auf lokale Variablen zugreifen. Der endgültige Modifikator muss jedoch vor der lokalen Variablen hinzugefügt werden.
Kann eine innere Klasse auf ihre Mitglieder der enthaltenden Klasse verweisen? Gibt es Beschränkungen?
Es ist total in Ordnung. Wenn es sich nicht um eine statische innere Klasse handelt, gibt es keine Begrenzung!
Wenn Sie statische verschachtelte Klassen als Sonderfall von inneren Klassen behandeln, können Sie in diesem Fall nicht auf gewöhnliche Mitgliedsvariablen der äußeren Klasse zugreifen, sondern nur statische Mitglieder in der äußeren Klasse. Zum Beispiel der folgende Code:
Klasse äußere {statische int x; statische Klasse Inner {void test () {syso (x); }}}}Anonyme innere Klasse (anonyme interne Klasse) kann andere Klassen erweitern und die Schnittstelle (Implementierung) (Interface) implementiert (Schnittstelle)?
Sie können andere Klassen erben oder andere Schnittstellen implementieren. Kann nicht nur, sondern muss es auch!
Zum Beispiel:
Java.util.date; public class -Test erweitert Datum {public static void main (String [] args) {new Test (). test (); } public void test () {System.out.println (Super.getClass (). getName ()); }} Das Ergebnis ist Test
In der Testmethode wird die Methode getClass (). GetName () direkt aufgerufen und der Name der Testklasse wird zurückgegeben. Da GetClass () in der Objektklasse als endgültig definiert ist, kann die Unterklasse die Methode nicht überschreiben. Aufrufen von GetClass (). GetName () -Methode in der Testmethode wird tatsächlich die von der übergeordnete Klasse erregte Methode getClass () aufgerufen, die dem Aufrufen der Super.getClass () -Methode entspricht. Daher sollte die methode Super.getClass (). GetName () auch den Test zurückgeben. Wenn Sie den Namen der übergeordneten Klasse erhalten möchten, sollten Sie den folgenden Code verwenden:
getClass (). getuperClass (). getName ();
Was ist der Unterschied zwischen objektorientiertem und prozessorientiertem Unterschied
1Der Ausgangspunkt ist anders. Der objektorientierte Ansatz besteht darin, sich mit der Frage der objektiven Welt auf eine Weise zu befassen, die dem konventionellen Denken entspricht. Es wird betont, dass die wichtigsten Punkte der Problemdomäne direkt auf die Schnittstelle zwischen Objekten hingewiesen werden. Der prozessorientierte Ansatz betont die Abstraktion und Modularität des Prozesses, bei dem es sich um eine prozessorientierte Konstruktion handelt oder ob sie sich mit objektiven Weltproblemen befassen.
2. Die objektorientierte Methode verwendet die Computerlogik, um die physikalische Existenz in der objektiven Welt zu simulieren, und verwendet die Objektsammelsklasse als grundlegende Einheit für den Umgang mit Problemen, um die Computerwelt so weit wie möglich näher an der objektiven Welt zu bringen, um das Problem direkter und klarer zu gestalten. Die objektorientierte Methode verwendet die Klassenhierarchie, um die Vererbung und Entwicklung zwischen den Klassen widerzuspiegeln, während die objektorientierte Prozessmethode Probleme mit der Grundeinheit behandelt, die das Modul ermöglicht, das den Prozess klar und genau ausdrückt, verwendet das Modulhierarchie, um die Beziehungen und Funktionen zwischen den Modulen, die mit dem Verfahren zu den Funktionen zu fassen, und das Problem des Objektivs.
3Die Datenverarbeitungsmethode unterscheidet sich von der Steuerungsprogrammmethode. Die objektorientierte Methode verkauft Daten und den entsprechenden Code in ein Ganzes. Grundsätzlich können andere Objekte ihre Daten nicht direkt ändern, dh die Änderung von Objekten kann nur von ihren eigenen Mitgliedsfunktionen abgeschlossen werden. Die Methode zur Steuerungsprogramm besteht darin, das Programm über "ereignisgesteuert" zu aktivieren und auszuführen. Der objektorientierte Prozess verarbeitet die Daten direkt über das Programm und die Verarbeitungsergebnisse werden nach Abschluss der Verarbeitung angezeigt. In Bezug auf die Kontrolle des Programms wird das Programm gemäß dem Design aufgerufen oder zum Programm zurückgegeben und kann keine Navigation sein. Es besteht eine Beziehung zwischen den Modulen, zwischen der Kontrolle und der Kontrolle und dem Anruf und dem Anruf.
4Die Analysedesign- und Codierungs -Konvertierungsmethoden sind unterschiedlich. Eine Analyse eines objektorientierten Ansatzes während des gesamten Software-Lebenszyklus. Bei Design und Codierung ist es ein reibungsloser Prozess. Von der Analyse über das Entwerfen und dann bis zum Codieren verwendet es ein konsistentes Modell, das heißt, es ist eine nahtlose Verbindung. Die objektorientierte Prozessmethode betont die Konvertierung zwischen analytischen Design und Codierung nach Regeln sowie die Analyse, das Design und die Codierung im gesamten Software-Lebenszyklus.
Was sind die Vorteile der objektorientierten Entwicklung
1 höhere Entwicklungseffizienz. Die Verwendung von objektorientierter Entwicklung kann reale Dinge abstrakt werden und reale Praktiken direkt zu entwickelten Objekten abbilden.
2 Gewährleistung der Robustheit der Software. Genau deshalb hat die Objektoriententwicklungsmethode eine hohe Wiederverwendbarkeit. Während des Entwicklungsprozesses wurde vorhandener Code, der in verwandten Bereichen getestet wurde, wiederverwendet. Daher spielt es natürlich eine gute Rolle bei der Förderung der Robustheit der Software.
3 Gewährleistung einer hohen Wartung der Software. Aufgrund der objektorientierten Entwicklungsmethode ist der Code sehr gut lesbar. Gleichzeitig macht das objektorientierte Designmuster die Codestruktur klarer. Gleichzeitig gibt es für das objektorientierte Entwicklungsmodell bereits viele sehr reife Designmuster. Diese Entwurfsmuster können es den Programmen ermöglichen, nur einige Module zu verändern, wenn es um Änderungen der Nachfrage konfrontiert ist, da es bequemer ist, aufrechtzuerhalten.
Was ist der Unterschied zwischen diesem und Super
In der Java -Sprache weist dies auf das aktuelle Instanzobjekt hin. Eine seiner wichtigsten Funktionen besteht darin, die Mitgliedsvariablen eines Objekts von den formalen Parametern einer Methode zu unterscheiden (wenn der Name einer Methode an der Mitgliedsvariablen teilnimmt, wird die Mitgliedsvariable überschrieben).
Super kann verwendet werden, um auf Methoden oder Mitgliedsvariablen der übergeordneten Klasse zuzugreifen. Wenn die Methode oder Mitgliedsvariable der untergeordneten Klasse den gleichen Namen wie die übergeordnete Klasse hat, wird auch die Methode oder die Mitgliedsvariable der übergeordneten Klasse überschrieben. Wenn Sie auf die Methode oder Mitgliedsvariable der übergeordneten Klasse zugreifen möchten, können Sie nur über das Super -Keyword darauf zugreifen
So erhalten Sie den Klassennamen der übergeordneten Klasse
Die Java -Sprache bietet eine Methode, um den Klassennamen zu erhalten: getClass (). GetName (). Entwickler können diese Methode nennen, um den Klassennamen zu erhalten. Für die Erbschaft kann der Klassenname der Elternklasse jedoch nicht erhalten werden, indem die Methode getClass ().
Klasse A {} public class -Test erweitert einen {public void test () {System.out.println (Super.getClass (). GetName ());} public static void main (String []) args) {new test.test ();}}Das Programmlaufergebnis ist Test. Der Grund dafür ist, dass jede Klasse in der Java -Sprache von der Objektklasse erbt. Die GetClass -Methode ist in der Objektklasse als endgültige native. Unterklassen können diese Methode nicht überschreiben. Daher rufen Sie in der Objektklasse schließlich die GetClass () -Methode auf. Die Definition der GetClass () -Methode in der Objektklasse lautet: Die Laufzeitklasse dieses Objekts zurückgibt. Der Namenscode der übergeordneten Klasse kann in der Unterklasse durch den Reflexionsmechanismus von Java wie folgt erhalten werden:
Class A{}Public class Test extends A{public void test(){System.out.println(this.getClass().getSuperclass().getName());}Publci static void main(string[] args){New Test().test();}}Was ist der Unterschied zwischen Kombination und Vererbung
Komposition und Vererbung sind zwei Möglichkeiten, Code in objektorientiertem Wiederverwenden zu verwenden. Kombination bezieht sich auf das Erstellen von Objekten der Originalklasse in einer neuen Klasse und die Wiederverwendung der Funktionen der vorhandenen Klasse. Die Vererbung ist eines der Hauptmerkmale von objektorientiertem Merkmal, mit dem Designer die Implementierung einer Klasse basierend auf der Implementierung anderer Klassen definieren können. Sowohl die Zusammensetzung als auch die Vererbung ermöglichen die Einstellung von untergeordneten Objekten in neuen Klassen, außer dass die Komposition angezeigt wird, während die Vererbung implizit ist. Es gibt eine Korrespondenz zwischen Kombination und Vererbung: Die gesamte Klasse in der Zusammensetzung entspricht der Unterklasse in der Vererbung, und die lokale Klasse in der Zusammensetzung entspricht der übergeordneten Erbschaftsklasse. Befolgen Sie bei der Verwendung den folgenden zwei Prinzipien:
1 Wenn es keine "is-a" -Beziehung zwischen zwei Klassen gibt, verwenden Sie die Vererbung nicht leicht, da eine übermäßige Verwendung der Vererbung die Wartbarkeit des Codes zerstört. Wenn die übergeordnete Klasse geändert wird, wirkt sich alle von ihr geerbten Unterklassen aus.
2. Verwenden Sie nicht die Vererbung, nur um Polymorphismus zu erreichen. Wenn die Beziehung zwischen den Klassen kein "is-a" ist, können Sie den gleichen Zweck erfüllen, indem Sie Schnittstellen und Kombinationen implementieren.
Da die Java -Sprache nur das einzelne Vererbung unterstützt, kann sie nicht direkt in Java implementiert werden, wenn Sie zwei oder mehr Klassen gleichzeitig erben möchten. Gleichzeitig wird in der Java -Sprache, wenn zu viel Vererbung erreicht wird, der Inhalt einer Klasse aufgebläht. Wenn Sie in der Java -Sprache Kombinationen verwenden können, versuchen Sie daher, die Vererbung nicht zu verwenden.
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!