646 votes

Pourquoi ne peut-méthodes statiques être résumé en Java

La question est en Java pourquoi je ne peux pas définir un résumé, la méthode statique? par exemple

abstract class foo {
    abstract void bar( ); // <-- this is ok
    abstract static void bar2(); //<-- this isn't why?
}

594voto

Tomalak Points 150423

Parce que "abstrait" signifie: "Implémente pas de fonctionnalité", et "statique" signifie: "Il existe des fonctionnalités, même si vous n'avez pas une instance d'objet". Et c'est une contradiction logique.

152voto

GaryF Points 11921

Vous ne pouvez pas remplacer une méthode statique, ce qui en fait l'abstrait serait vide de sens. En outre, une méthode statique dans une classe abstraite appartiennent à cette classe, et non pas la classe prioritaire, et ne pouvais donc pas être utilisé de toute façon.

96voto

Jared Points 7800

L' abstract d'annotation à une méthode indique que la méthode DOIT être surchargée dans une sous-classe.

En Java, une static membre (méthode ou champ) ne peut pas être remplacée par des sous-classes (ce n'est pas nécessairement le cas dans d'autres langages orientés objet, voir SmallTalk.)

Depuis les membres statiques ne peuvent pas être redéfinies dans une sous-classe, l' abstract d'annotation ne peut leur être appliqué.

En aparté - les autres langues de soutien héritage statique, comme exemple de l'héritage. À partir d'un point de vue de la syntaxe, ces langues nécessitent généralement le nom de la classe à être inclus dans la déclaration. Par exemple, en Java, en supposant que vous écrivez du code dans ClassA, ce sont les équivalents des états (si methodA() est une méthode statique, et il n'existe pas de méthode d'instance avec la même signature):

ClassA.methodA();

et

methodA();

En SmallTalk, le nom de la classe n'est pas une option, donc la syntaxe est la suivante (notez que SmallTalk ne pas utiliser le . pour séparer le "sujet" et le "verbe", mais utilise à la place que le statemend terminator):

ClassA methodA.

Parce que le nom de la classe est toujours nécessaire, de la bonne "version" de la méthode peut toujours être déterminée en parcourant la hiérarchie de classe. Pour ce que ça vaut, je ne le manquez de temps en temps static de l'héritage, et a été mordu par le manque d'héritage statique en Java quand j'ai commencé avec elle. En outre, SmallTalk est canard-typés (et n'a donc pas de programme de soutien par contrat.) Ainsi, il n'a pas d' abstract modificateur pour les membres de la classe.

14voto

anshulkatta Points 1240

J'ai aussi posé la même question , voici pourquoi

Depuis la classe Abstraite dit, il ne donnera pas la mise en œuvre et de permettre à la sous-classe pour lui donner

si la sous-classe a remplacer les méthodes de la super-classe ,

RÈGLE N ° 1 - UNE méthode statique ne peut pas être remplacée

Parce que des membres statiques et méthodes de compilation des éléments , c'est pourquoi la Surcharge(moment de la Compilation, Polymorphisme) de méthodes statiques sont autorisés plutôt puis en Substituant (Polymorphisme d'Exécution)

Donc , ils ne peuvent pas être Abstraite .

Il n'y a pas de chose comme abstrait statique <--- Pas autorisés dans l'Univers Java

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X