Comment appeler la méthode de sous-classe (Java)
Je suis assez nouveau sur Java. Je travaillais sur une mission où j'ai une superclasse et plusieurs sous-classes, où certaines sous-classes ont des attributs que les autres n'ont pas. Essentiellement, je dois créer un tableau d'objets SuperClass, puis initialiser chaque élément du tableau avec l'une des sous-classes.
Cependant, lorsque j'essaie d'utiliser l'une des méthodes spécifiques des sous-classes, j'obtiens une erreur de compilation m'indiquant que la méthode .getY () n'a pas été trouvée dans la SuperClass , alors qu'elle est clairement définie comme une méthode de SuperClass . J'ai résumé le problème au code suivant (en m'assurant que j'obtiens toujours la même erreur):
public class StackOverFlow {
public static void main(String[] args) {
/*
SubClass obj = new SubClass(4, 5);
System.out.println(obj.getX());
System.out.println(obj.getY());
*/
SuperClass[] arr;
arr = new SuperClass[5];
arr[0] = new SubClass(5, 10);
System.out.println(arr[0].getX());
System.out.println(arr[0].getY());
}}
public class SuperClass {
private int x;
public SuperClass(int x){
this.x = x;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}}
public class SubClass extends SuperClass{
private int y;
public SubClass(int x, int y){
super(x);
this.y = y;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}}
Lorsque j'utilise le code commenté, je n'obtiens pas d'erreur, ce qui signifie probablement que l'erreur provient d'une utilisation incorrecte du tableau de classes. Quelqu'un peut-il m'aider?
Votre tableau déclaré arr
est un tableau d' objets SuperClass de type (classe) . Tout ce qui se trouve dans le tableau doit être une chose qui est une SuperClasse .
Votre sous-classe nommée SubClass EST une chose de type SuperClass - c'est une extension de cette classe, en ajoutant y
et getY
, mais elle est toujours conforme à SuperClass . Tout ce que vous pouvez faire avec SuperClass, vous pouvez également le faire avec SubClass, vous êtes donc autorisé à ajouter des objets SubClass au tableau de type SuperClass .
Là où se trouve votre erreur, à arr[0].getY()
, la chose qui est à l'endroit arr[0]
est, en fait, une sous-classe, parce que vous venez de la mettre là, mais il n'y a aucune garantie que ce soit le cas - la seule garantie est que les choses dans le tableau sont du type SuperClass , et les choses de type SuperClass n'ont pas de getY()
méthode.
Lorsque vous savez qu'une chose est de type SubClass, vous pouvez la caster , comme :, et vous (SubClass) arr[0]
devez la mettre entre parenthèses pour appliquer la distribution avant d'attacher l'appel de méthode, de sorte que ((SubClass) arr[0]).getY()
Casting a ses propres erreurs potentielles, si vous essayez de lancer quelque chose à SubClass lorsque cette chose n'est pas réellement une sous- classe, cela provoquera une erreur (mais c'est une autre discussion).
Donc, la réponse à la question "Comment appeler une méthode de sous-classe" est de convertir l'objet en sous-classe:
// Direct replacement for your line of code:
System.out.println( ((SubClass) arr[0]).getY() );
// or assign it to another variable first:
SubClass sc = (SubClass) arr[0];
System.out.println( sc.getY() );