Comment appeler une méthode en dehors de la classe interne en utilisant un mot clé super
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() {
}
}
}
super.x()
est un moyen d'appeler des méthodes de votre classe parent.
Attributes
n'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 new
mot - clé, et super
vous ne pouvez pas l'utiliser super
pour 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: super
est 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 main
n'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.