Comment appeler une méthode en dehors de la classe interne en utilisant un mot clé super


AdolfJames Urian

Comment appeler une méthode en dehors de innerClass? J'ai fait la méthode extend mais elle m'a dit que la méthode Attributes n'est pas définie même si j'ai fait étend, est-ce parce que je ne peux pas étendre une classe à l'intérieur d'une classe?

Voici mon code:

package mainClass;

import java.util.Random;
import mainClass.Characters;
import mainClass.Main;

class Characters {
  
  static String name = "";
  static int attack = 0;
  static int maxAttack = 0;
  static int hp = 0;
  static int def = 0;
  
  static class Selena extends Attributes {
    
    private static void main() {
      
      super.Attributes();
      //I extend Attributes but why does he not recognize the class Attributes
      
    }
    
    public static void Scratch() {
      
      System.out.println(" uses Scratch!");
      
    }
    
  }
  
  
  static class Attributes {
    
    Attributes() {
      
      
      
    }
    
  }
  
}
rzwitserloot

super.x()est un moyen d'appeler des méthodes de votre classe parent.

Attributesn'est pas une méthode . En fait, cela Attributes() {}à la toute fin de votre pâte n'est pas non plus une méthode; c'est un constructeur.

Si vous voulez créer un nouvel objet Attributes, vous utilisez le newmot - clé, et supervous ne pouvez pas l'utiliser superpour invoquer de telles choses. Mais vous n'êtes pas obligé de new Attributes();le faire, car super n'a qu'un seul but : différencier l'appel à la méthode dans votre propre classe par rapport à la version que vous remplacez. Donc:

class Parent {
    void hello() {
        System.out.println("From parent");
    }
}

class Child extends Parent {
    void foo() {
        hello();
    }
}

Notez comment dans l'exemple ci-dessus il n'y en a pas super.et pourtant cela fonctionnera bien, et l'appel à hello()s'imprimerait "From parent". Mais:

class Child extends Parent {
    void hello() {
        // this overrides
        System.out.println("From child");
    }

    void foo() {
        hello(); // prints 'from child'
        super.hello(); // prints 'from parent'
    }
}

De plus, super.x()n'est valable que dans la classe elle-même et non dans une classe interne de celle-ci, ce qui n'a heureusement pas d'importance pour votre cas.

NB: superest utilisé pour trois fonctionnalités Java pour la plupart à totalement indépendantes. Les limites contravariantes des génériques (cela n'a aucun rapport avec ce que vous faites, donc je ne vais pas approfondir la question), en invoquant l'implémentation de la classe parent des méthodes et en choisissant le constructeur du parent à exécuter en premier. Ce dernier peut être ce que vous voulez, mais cela n'est valable que dans les constructeurs eux-mêmes, et mainn'est pas un constructeur:

class MyAttrs extends Attributes {
    public MyAttrs(String x) {
        super(x);
    }
}

class Attributes {
    public Attributes(String x) {
        // ....
    }
}

Les deux trucs qui ressemblent à une méthode sont des constructeurs; Vous DEVEZ invoquer exactement l'un de vos constructeurs parents, OU l'un des vôtres, comme première chose dans tout constructeur. Si vous ne le faites pas, java agit comme s'il super();était en haut de votre méthode. Vous pouvez utiliser super(argsHere)pour choisir explicitement l'un des constructeurs de votre classe parent à appeler.

Articles connexes


Comment appeler une méthode en dehors de la classe

JoeDoe Est-il possible d'appeler une méthode en dehors de la classe, en utilisant une instance existante? Je veux lire les données du capteur et essayer de les envoyer via une connexion BT (déjà connectée et envoyant d'autres informations) mais je ne peux pas

Comment appeler une méthode de classe en utilisant Optional

Abhishek Galoda: J'essaye d'appeler une méthode privée de Optional.ispresent (callmethod) mais j'obtiens une erreur de compilation. En gros, c'est la condition que je vérifie et si elle satisfait, appelez la méthode privée. final OrderLines orderLines = readFr

Comment appeler une méthode de classe en utilisant Optional

Abhishek Galoda: J'essaye d'appeler une méthode privée de Optional.ispresent (callmethod) mais j'obtiens une erreur de compilation. En gros, c'est la condition que je vérifie et si elle satisfait, appelez la méthode privée. final OrderLines orderLines = readFr

Comment appeler une méthode de classe en utilisant ajax en c #

Shaiwal Tripathi J'ai une classe dans mon projet c #. Disons Sample.cs que je veux appeler sa méthode en utilisant ajax, mais je ne sais pas comment utiliser le nom de classe dans l'url d'ajax, je fais comme ça, mais ça ne fonctionne pas $.ajax({