Comment fonte d'objet sous-classe de super-classe de l'objet
j'ai 2 classes, appelée super-classe et sous-classe, j'ai essayé de jeter l'objet sous-classe de super-classe, mais il semble ne fonctionne pas quand je veux utiliser le sous-objet de la classe mère. S'il vous plaît aider à expliquer. Merci. Ce sont le code:-
public class superclass
{
public void displaySuper()
}
System.out.println("Display Superclass");
}
}
public class subclass extends superclass
{
public void displaySub()
{
System.out.println("Display Subclass");
}
}
public class Testing
{
public static void main(String args[])
{
subclass sub = new subclass();
superclass sup = (superclass) sub;
quand j'ai essayé d'utiliser le displaySub() de la sous-classe d'erreur
sup.displaySub(); //the displaySub method cant found
}
}
- parce que
superclass sup
de référence ne peut pas voir des membres de la classe enfant si l'on excepte méthode redéfinie.
Vous devez vous connecter pour publier un commentaire.
Une super-classe ne peut pas savoir les sous-classes de méthodes.
Pensez-y de cette façon:
Vous avez une super-classe
Pet
Vous avez deux sous-classes de
Pet
, à savoir:Cat
,Dog
speak
Pet
super-classe est au courant de ces derniers, comme tous lesPet
s peut parler (même si elle ne connaît pas exactement la mécanique de cette opération).Dog
peut cependant faire des choses qu'un chat ne peut pas, c'est à direeatHomework
Dog
à unPet
, les observateurs de l'application ne serait pas au courant que lePet
est en fait unDog
(même si nous savons ce que les maîtres d'œuvre)eatHomework
d'unPet
Vous pu résoudre votre problème en disant que le programme que vous savez
sup
est de typesubclass
Vous pourriez résoudre complètement le problème en faisant quelque chose comme ceci:
découvrez ce tutoriel sur plus d'infos: remplace
Prendre un coup d'oeil à java héritage: https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
Une sous-classe de super-classe de méthodes, mais une super-classe ne peut pas utiliser la sous-classe des méthodes. Si vous voulez appeler une super-classe à utiliser une sous-classe de la méthode, vous devez d'abord lancer le super-classe de l'instance de la sous-classe.
(subclass) sup
Même si les deux super et sous-objet pointent vers le même objet en mémoire, votre super objet ne sait rien à propos de l'existence de sous.subMethod(). Donc, vous avez obtenu l'erreur ci-dessus. La figure suivante illustre ce qui s'est passé:
Ce n'est pas d'aller travailler, parce que vous êtes à l'exécution d'une rétrécissement de conversion de référence. À partir de la JLS:
Dans votre scénario,
subclass
est un sous-type desuperclass
. Cela signifie qu'il est permis de déclarer une instance d'unesubclass
comme unsuperclass
:comme vous l'avez déjà découvert.
Cependant, les membres de la classe ne sont jamais transférées via héritage; c'est la super-classe peut passer le long des champs et des méthodes de ses classes, mais le sous-classe ne peut pas faire de même pour sa super-classe.
De la JLS:
De lier tous ces grands mots:
superclass sc = new subclass();
), vous ne pouvez accéder à aucune des sous-classes " membre de champs ou de méthodes.Général de la programmation pratique, la seule fois que vous utilisez une classe plus large de la déclaration, c'est quand vous avez seulement besoin de cet objet pour faire certaines opérations sur la base des traits de la mère de la classe ou de l'interface, et pas quelque chose de spécifique à la sous-instances de la classe ou de l'interface. Dans ce cas, vous devriez éviter à l'aide de la mère et de l'utilisation de la classe enfant au lieu de cela, comme vous compter sur le très spécifique de comportement qui n'est présent que dans la classe enfant.