l'appel d'une méthode super partir d'une méthode statique
Est-il possible d'appeler une super méthode statique de l'enfant méthode statique?
Je veux dire, de façon générique, autant maintenant j'ai le texte suivant:
public class BaseController extends Controller {
static void init() {
//init stuff
}
}
public class ChildController extends BaseController {
static void init() {
BaseController.loadState();
//more init stuff
}
}
et il fonctionne, mais j'aimerais le faire de manière générique, quelque chose comme un appel à super.loadState(), qui ne semble pas fonctionner...
Vous devez vous connecter pour publier un commentaire.
En Java, les méthodes statiques ne peuvent pas être overidden. La raison est bien expliqué ici
Donc, il ne dépend pas de l'objet auquel il est fait référence. Mais au lieu de cela, il dépend du type de référence. Par conséquent, la méthode statique est dit en cacher une autre méthode statique et ne pas le remplacer.
Par exemple (Cat est une sous-classe de l'Animal):
Classe principale:
Maintenant, la sortie serait comme indiqué ci-dessous
Pour
class methods
, le système d'exécution appelle la méthode définie dans le type de compilation de référence sur lequel la méthode est appelée.En d'autres termes, l'appel à des méthodes statiques sont mappés au moment de la compilation et dépend du type déclaré de la référence (Parent dans ce cas) et pas l'instance les points de référence lors de l'exécution. Dans l'exemple, le type de compilation de
myAnimal
estAnimal
. Ainsi, le système d'exécution appelle la méthode hide défini dansAnimal
.Il est héritage statique en Java. L'adaptation de l'exemple de Nikita:
Maintenant cette compile, et en invoquant C imprime "CA", bien sûr. Maintenant nous changer de classe B de la présente:
et recompiler uniquement B (C). Maintenant invoquant C de nouveau, il serait d'impression "CB".
Il n'y a pas de
super
comme mot-clé pour les méthodes statiques, - une (mauvaise) justification peut être que "Le nom de la super-classe est écrit dans la déclaration de cette classe, de sorte que vous avez eu à recompiler votre classe néanmoins pour le changer, de sorte que vous pouvez changer la statique appelle ici, trop."static
est mal vu en Java, donc je ne suis pas d'accord que c'est une mauvaise décision.L'ensemble du concept d'héritage n'est pas appliquée aux éléments statiques en Java. E. g., méthode statique ne peut pas remplacer une autre méthode statique.
Donc, non, vous devrez l'appeler par son nom, ni de leur faire des méthodes d'instance d'un objet. (Vous voudrez peut-être consulter un de l'usine de modèles en particulier).
Un exemple pratique
Ce imprime
A
et puisB
. I. e., méthode invoquée dépend de la façon dont la variable est déclarée et rien d'autre.Vous pouvez réellement appeler la méthode statique d'une super-classe de manière générique, étant donné que vous connaissez le nom de la méthode et de ses paramètres.
Cela devrait fonctionner et dans la sous-classe, vous avez tout mis dans la classe de base disponibles.
La sortie doit être:
Bonjour à partir de la Base de
myVar = Bon
Le nom officiel de votre mise en œuvre est appelée méthode de masquage. Je suggère l'introduction d'une statique init(contrôleur Contrôleur) de la méthode, et l'appel d'une méthode d'instance de profiter de l'annulation de la.
Vous pouvez ensuite appeler le Contrôleur.init(controllerInstance).
Pour les méthodes statiques il n'existe aucune instance d'une classe nécessaire, donc il n'est pas super.