Das Schlüsselwort "abstract" bedeutet, dass Sie keine Instanz der Klasse (ein Objekt) erstellen können.
Java.Lang.Math ist mit den folgenden Schlüsselwörtern vorangestellt
%Vor%Aber kein "abstraktes" Keyword. Die Klasse bietet einfach eine Sammlung verwandter statischer Variablen und Methoden, wie PI und sin ().
Statisch bedeutet, dass diese Variablen / Methoden zwischen verschiedenen Instanzen des Objekts nicht eindeutig sein können (es gibt nur eine Kopie dieser Variablen / Methoden, die der Klasse selbst zugeordnet sind). Warum sollte der Programmierer sogar eine Instanz der Klasse erstellen? Warum nicht mit "abstrakt" vorangehen?
java.lang.Math
ist eine Dienstprogrammklasse (enthält nur statische Hilfsmethoden).
Die korrekte Definition der Dienstprogrammklasse besteht darin, sie so zu final zu machen, dass keine andere Klasse sie erweitern kann und privater no-args-Konstruktor ist, damit niemand sie erstellen kann eine Instanz der Klasse.
Sie können also keine Instanz der Klasse erstellen. Wenn Sie jedoch nach abstract verfahren, können Sie final nicht verwenden, und Sie können auf keinen Fall verhindern, dass es erweitert wird. Daher ist der frühere Ansatz besser.
final
und abstract
können nicht zusammen angewendet werden, da final
class nicht überschrieben werden kann und abstract
classes zum Überschreiben vorgesehen sind.
Eine Klasse, die als
final
deklariert ist, kann nichtsubclassed
sein, die für die Erstellung einer verwendet wirdimmutable
Klasse wie String
Es ist besser erklärt unter JSL Abschnitt - 8.1. 1. Klassenmodifikatoren
Eine Klasse abstract
ist eine Klasse, die unvollständig oder unvollständig ist.
Eine Klasse kann als final
deklariert werden, wenn ihre Definition vollständig ist und keine Unterklassen gewünscht oder benötigt werden.
beide obigen Aussagen sind widersprechend einander.
Wenn Sie mehr darüber lesen möchten, schauen Sie sich Java Tutroial unter Eine Strategie zum Definieren unveränderbarer Objekte
the class as final
zu deklarieren. Ein ausgefeilterer Ansatz besteht darin, the constructor private
zu erstellen und Instanzen in factory methods
. Das Schlüsselwort Abstrakt bedeutet, dass die Klasse nicht instanziierbar sein kann, aber erweitert werden kann. Und im Falle von Utility-Klassen wie Math Class hat Extending keinen Sinn. Wenn man den Konstruktor no-args deklariert, wird es nicht-instantiierbar und endgültig macht es nicht erweiterbar ... Also ist es die perfekte Übereinstimmung .... Und wenn Sie Abstract verwenden, können Sie Final nicht verwenden ...
Tags und Links java abstract-class