JavaRush /Java-Blog /Random-DE /endgültige Java-Methoden und -Klassen
articles
Level 15

endgültige Java-Methoden und -Klassen

Veröffentlicht in der Gruppe Random-DE
Indem wir eine Klassenmethode mit einem Modifikator bezeichnen final, meinen wir, dass keine abgeleitete Klasse in der Lage ist, diese Methode durch Änderung ihrer internen Implementierung zu überschreiben. Mit anderen Worten, wir sprechen über die endgültige Version der Methode. Die Klasse als Ganzes kann auch als markiert werden final. endgültige Java-Methoden und -Klassen - 1
final class NoExtending {
// …
}
Eine als gekennzeichnete Klasse finalkann nicht vererbt werden und alle ihre Methoden erwerben indirekt die Eigenschaft final. Durch die Verwendung der a-Funktion finalin Deklarationen von Klassen und Methoden kann die Codesicherheit erhöht werden. Wenn eine Klasse mit einem Modifikator ausgestattet ist final, kann niemand die Klasse verlängern und dabei wahrscheinlich ihren Vertrag brechen. Wenn ein Zeichen finaleine Methode bezeichnet, können Sie deren interner Umsetzung in allen Situationen voll und ganz vertrauen, ohne Angst vor „Fälschungen“ haben zu müssen. Die Verwendung ist finalbeispielsweise bei der Deklaration einer Methode angebracht, die eine Überprüfung des vom Benutzer eingegebenen Passworts erfordert, um sicherzustellen, dass genau das ausgeführt wird, was die Methode ursprünglich beabsichtigt hatte. Ein möglicher Angreifer wird nicht in der Lage sein, die ursprüngliche Implementierung einer solchen Methode zu ändern, indem er eine überschriebene Version davon in das Programm „schlüpft“, die beispielsweise immer den Wert „true“ zurückgibt, was eine erfolgreiche Registrierung des Benutzers anzeigt, unabhängig vom Passwort er ist tatsächlich eingetreten. Sie haben das Recht, wenn es die konkrete Situation zulässt, noch weiter zu gehen und finaldie gesamte Klasse als Klasse zu deklarieren; Die Methode ValidatePassworderwirbt indirekt dieselbe Eigenschaft. Die Verwendung eines Modifikators finalin einer Methoden- oder Klassendeklaration führt zu erheblichen Einschränkungen der Möglichkeit der weiteren Verwendung und Entwicklung des Codes. Die Verwendung finaleiner Methode in einer Deklaration ist ein sicherer Indikator dafür, dass die Methodenimplementierung in sich abgeschlossen und vollständig ist. Andere Programmierer, die Ihre Klasse nutzen und ihre Funktionen entsprechend ihren eigenen Bedürfnissen erweitern möchten, werden in der Auswahl der Mittel zur Erreichung ihres Ziels eingeschränkt oder ihnen völlig vorenthalten. Indem Sie finaleine Klasse als Ganzes markieren, deaktivieren Sie ihre Fähigkeit zur Vererbung und verringern wahrscheinlich ihren Nutzen für andere erheblich. Wenn Sie den Modifikator verwenden möchten final, stellen Sie sicher, dass SIE zu solchen Opfern bereit sind und ob es sich lohnt, sie zu bringen. Um ein ausreichendes Maß an Codesicherheit zu erreichen, ist es in vielen Fällen nicht notwendig, die gesamte Klasse als zu bezeichnen final– es ist durchaus möglich, die Erweiterbarkeit der Klasse zu bewahren, indem finalnur ihre „kritischen“ Strukturelemente mit einem Modifikator markiert werden. In diesem Fall lassen Sie die Hauptfunktionen der Klasse intakt und ermöglichen gleichzeitig deren Vererbung durch das Hinzufügen neuer Mitglieder, ohne jedoch die „alten“ neu zu definieren. Natürlich finalmüssen die Felder, auf die der Code der Methoden zugreift, wiederum als finalbeide bezeichnet werden private, da sonst jede abgeleitete Klasse ihren Inhalt ändern kann, was sich auf das Verhalten der entsprechenden Methoden auswirkt. Ein weiterer Effekt der Verwendung eines Modifikators finalhängt mit der Vereinfachung des vom Compiler gelösten Codeoptimierungsproblems zusammen. Dies geschieht, wenn eine Methode aufgerufen wird, die nicht als markiert istfinalermittelt das Laufzeitsystem die tatsächliche Klasse des Objekts, ordnet den Aufruf dem am besten geeigneten Code aus der Gruppe der überladenen Methoden zu und übergibt die Steuerung an diesen Code. Wenn jedoch beispielsweise die Methode getNameim zuvor besprochenen Klassenbeispiel Attrals bezeichnet worden wäre final, wäre der Vorgang des Aufrufs möglicherweise erheblich vereinfacht worden. Im trivialsten Fall, etwa im Fall von getName, kann der Compiler einfach den Methodenaufruf durch seinen Textkörper ersetzen. Dieser Mechanismus wird Code-Inlining genannt. Bei Verwendung der Inline-Version der Methode getNamewerden die folgenden beiden Ausdrücke genau gleich ausgeführt:
system.out.println("id = " + rose.name);
system.out.println("id = " + rose.getName());
Obwohl die obigen Ausdrücke äquivalent sind, hat der zweite immer noch einen Vorteil, da die Methode es getNameIhnen ermöglicht, dem Namensfeld eine schreibgeschützte Eigenschaft zu geben und dem Klassencode einen gewissen Abstraktionsgrad zu verleihen, der es Ihnen ermöglicht, die Eigenschaft freier zu ändern Klassenimplementierung. Das gleiche Optimierungsschema kann vom Compiler auf die Methoden privateund angewendet werden statiс, da diese ebenfalls kein Überschreiben zulassen. Durch die Verwendung eines Modifikators finalin Klassendeklarationen werden auch einige Typprüfungsvorgänge effizienter. In diesem Fall können viele solcher Operationen bereits in der Kompilierungsphase durchgeführt werden und potenzielle Fehler werden daher viel früher erkannt. Wenn der Compiler im Quelltext auf einen Verweis auf eine Klasse stößt final, kann er „sicher“ sein, dass das entsprechende Objekt vom angegebenen Typ ist. Der Compiler ist in der Lage, sofort den Platz zu ermitteln, den eine Klasse in der gesamten Klassenhierarchie einnimmt, und zu prüfen, ob sie korrekt verwendet wird oder nicht. Wenn der Modifikator finalnicht angewendet wird, werden die entsprechenden Prüfungen erst in der Programmausführungsphase durchgeführt. Übung 3.4. Ist es ratsam, den letzten Modifikator in die Methodendeklarationen (und wenn ja, welche) der Fahrzeug- und Personenkraftwagenklassen aufzunehmen ? Link zur Originalquelle: http://src-code.net/metody-i-klassy-final-java
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION