In liaison de méthode dynamique Une référence de super-classe peut uniquement appeler une méthode de sous-classe héritée et surchargée par celle-ci. Cependant, le contraire peut être mis en œuvre.Est-il possible qu'un objet de superclasse renvoie une méthode de membre de sous-classe qui n'est pas héritée?
abstract class in
{
abstract void print();
}
class a extends in
{
String name=this.getClass().getSimpleName();
void show()
{
System.out.println("class "+name);
}
void print()
{
show();
}
}
class Main
{
public static void main(String args[])
{
in x;
x = new a();
x.print();
}
}
Ici, il imprime avec succès
classe un
également getClass() renvoie le nom de sous-classe au lieu du nom superclasse ce fait référence à l'objet superclasse dans méthode principale.
Les parents ne peuvent pas connaître les enfants. Un développeur d'une classe ne peut pas savoir comment sa classe sera étendue par les utilisateurs. – duffymo
Tout 'in' sait qu'il devrait avoir une méthode appelée' print() '. Toute l'implémentation de cette méthode se déroule dans 'a', qui sait tout sur' a' (en ce qui concerne son nom de classe et d'autres méthodes). – khelwood
Vous voulez dire que x.print() est équivalent à un nouveau(). Print()? Mais x n'est-il pas une référence de superclasse? – ZEU5