Surcharge

amasou Messages postés 36 Date d'inscription mardi 12 mai 2009 Statut Membre Dernière intervention 1 septembre 2010 - 16 nov. 2009 à 15:54
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 - 16 nov. 2009 à 16:37
bonjours
je veux savoir pourquoi lorsque en ecrire animal b=new chien(); il affiche le contenu de methode az de chien
et losque en mettre animal b=new chien(23); b.az(23) avec un argument il affiche le contenu de methode az de animal
merci


public class animal {public int az ( ){return 2;}

public class chien extends animal {public int aze (){return 3;}

class test{
public static void main(String[] args) {
animal a=new animal();
animal b=new chien();
System.out.println(a.az());
System.out.println(b.az());
}

2 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 nov. 2009 à 16:36
Salut,

J'ai pas trop compris ta question : étant donné que la fonction az de animal et aze de chien n'ont pas le même nom, il n'y a pas surcharge...

De plus, la fonction az de la classe animal ne possède pas d'argument, donc tu dois avoir, au mieux, une erreur de compilation...

______________________________________
DarK Sidious
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
16 nov. 2009 à 16:37
Salut,

c'est une redéfinition et non une surcharge (qui correspond à la même méthode mais avec des paramètres différents).
Tu as le type déclaré (animal) et le type réel (chien). En java, on exécute toujours la méthode redéfinie correspondant au type réel.
Donc quand tu fais a.az(), c'est la méthode du type réel, ici animal, qui est appelée. Quand tu fais b.az(), c'est la méthode du type réel, ici chien, qui est appelée.
0
Rejoignez-nous