Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flex
Flex Forum d'entraide sur la programmation Adobe Flex : applications Internet riches (RIA)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2010, 15h24   #1
Membre confirmé
 
Avatar de samy2525
 
Inscription : janvier 2008
Messages : 249
Détails du profil
Informations personnelles :
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : janvier 2008
Messages : 249
Points : 266
Points : 266
Par défaut Héritage de classe

Bonjour tout le monde,

j'ai une petite question de type programmation objet, donc voila c'est quoi la différence entre ces deux codes

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class A extends B
{
   public function A()
  {

  }
}

et

public class A extends B
{
   public function A()
  {
       super();
  }
}
à ma connaissance la deuxième, appelle le constructeur de la classe mère pour initialiser quelques attributs.

En testant un héritage d'un DataGrid sans mettre le mot clé super () dans le constructeur de la sous classe, j'arrive comme même à rentrer dans le constructeur de la classe mère et initialiser la hauteur de la ligne .....


voila si quelqu'un a une réponse je suis preneur

Merci

Samy
__________________
http://www.m-ataf.com (En cours de construction)
samy2525 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 12h08   #2
Membre habitué
 
Maxime Faye
Développeur Web
Inscription : novembre 2006
Messages : 123
Détails du profil
Informations personnelles :
Nom : Maxime Faye
Âge : 27
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2006
Messages : 123
Points : 129
Points : 129
Envoyer un message via MSN à Maskime Envoyer un message via Skype™ à Maskime
Hello,

En effet tu as fais la bonne analyse.
Quand tu fais hériter une classe à une autre, la classe enfant se retrouve dotée des attributs protected ou public de la classe parente ainsi que de son type:
En prenant ton exemple, si tu fais une méthode qui réclame en param un objet de type A, tu peux également lui passer un type B puisque le type B est également un type A, mais attention l'inverse n'est pas vrai. Si tu fais une méthode qui réclame un type B tu ne peux pas lui passer un type A car A n'hérite pas de B...
Mais ta classe enfant n'est pas obligée d'instancier la classe parente pour pouvoir fonctionner.
Maintenant quand tu fais super(), c'est parce que tu n'es pas sensé savoir ce que fais le constructeur de l'objet parent (principe d'encapsulation). Il initialise certainement des propriétés qui sont utilisées au sein du framework... Tu n'es pas obligé de le faire mais il est recommandé de le faire. de la même manière quand tu fais un override de méthode, il est également recommandé de faire un appel à la méthode de la classe parente.

Voilà j'espère avoir répondu à ta question.
__________________
Si je vous poste un bout de code pour vous aider, prenez bien en compte que je n'ai pas testé ce que je vous poste et que je vous donne les grandes lignes.
Donc ne me dites pas : "Ca marche pas ton truc, y a une erreur..."
Maskime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 12h39   #3
Membre confirmé
 
Avatar de samy2525
 
Inscription : janvier 2008
Messages : 249
Détails du profil
Informations personnelles :
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : janvier 2008
Messages : 249
Points : 266
Points : 266
Bonjour, Merci pour cette réponse complète.

Cependant mon interrogation portait sur le faite que sans mettre le mot clé super() dans le constructeur de la sous-classe j'arrive à rentrer dans le constructeur de la classe mère pour exécuter comme tu dis quelques actions qui initialisent quelques attribut ..........

alors que normalement on ne doit pas rentrer dans le constructeur de la classe mère.

Je ne sais pas si je suis claire ou pas je l'espere en tous les cas

Merci

Samy
__________________
http://www.m-ataf.com (En cours de construction)
samy2525 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 13h08   #4
Modérateur
 
Homme
Consultant Flex / Java
Inscription : novembre 2008
Messages : 452
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Luxembourg

Informations professionnelles :
Activité : Consultant Flex / Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2008
Messages : 452
Points : 637
Points : 637
Salut,
Citation:
Envoyé par Maskime Voir le message
En prenant ton exemple, si tu fais une méthode qui réclame en param un objet de type A, tu peux également lui passer un type B puisque le type B est également un type A, mais attention l'inverse n'est pas vrai. Si tu fais une méthode qui réclame un type B tu ne peux pas lui passer un type A car A n'hérite pas de B...
N'aurais-tu pas inversé le A et le B justement ?
__________________
N'oubliez pas avant de poster :
et bien sûr la doc Flex
Krazymins est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 16h48   #5
Membre habitué
 
Maxime Faye
Développeur Web
Inscription : novembre 2006
Messages : 123
Détails du profil
Informations personnelles :
Nom : Maxime Faye
Âge : 27
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2006
Messages : 123
Points : 129
Points : 129
Envoyer un message via MSN à Maskime Envoyer un message via Skype™ à Maskime
Citation:
Envoyé par Krazymins Voir le message
Salut,

N'aurais-tu pas inversé le A et le B justement ?
Ouais je me rends compte en lisant le code posté que dans ma tête B héritait de A mais en fait c'est A qui hérite de B
Donc reprendre mon explication en inversant A et B
__________________
Si je vous poste un bout de code pour vous aider, prenez bien en compte que je n'ai pas testé ce que je vous poste et que je vous donne les grandes lignes.
Donc ne me dites pas : "Ca marche pas ton truc, y a une erreur..."
Maskime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 19h30   #6
Rédacteur/Modérateur
 
Avatar de beekeep
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 1 604
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 1 604
Points : 2 233
Points : 2 233
Bonjour à tous,

Le constructeur de la classe de base est toujours exécuté, si super n'est pas appelé l'instruction est ajoutée (par le compilateur ?) au début du constructeur de la classe étendue.
Donc le super peut servir à exécuter des instructions avant l'appel à super (qui est de toute façon appelé).

Pour les méthodes c'est différents, on peut choisir de ne pas exécuter la méthode de la classe de base (par défaut) ou d'appeler super.maMethode().
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 23h59   #7
Membre confirmé
 
Avatar de samy2525
 
Inscription : janvier 2008
Messages : 249
Détails du profil
Informations personnelles :
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : janvier 2008
Messages : 249
Points : 266
Points : 266
bonjour beekeep, merci pour ta réponse, la je comprends mieux pourquoi je rentre dans le constructeur de la classe de base sans le mot clé super, est il possible que ça soit une spécificité de flex ou bien le java .NET le font aussi


merci encore pour tes précisions

Samy
__________________
http://www.m-ataf.com (En cours de construction)
samy2525 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2010, 09h52   #8
Membre habitué
 
Maxime Faye
Développeur Web
Inscription : novembre 2006
Messages : 123
Détails du profil
Informations personnelles :
Nom : Maxime Faye
Âge : 27
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2006
Messages : 123
Points : 129
Points : 129
Envoyer un message via MSN à Maskime Envoyer un message via Skype™ à Maskime
Ha bah je me coucherai moins bête ce soir

Merci
__________________
Si je vous poste un bout de code pour vous aider, prenez bien en compte que je n'ai pas testé ce que je vous poste et que je vous donne les grandes lignes.
Donc ne me dites pas : "Ca marche pas ton truc, y a une erreur..."
Maskime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 17h52   #9
Membre éclairé
 
Inscription : janvier 2004
Messages : 319
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2004
Messages : 319
Points : 384
Points : 384
Citation:
Envoyé par samy2525 Voir le message
bonjour beekeep, merci pour ta réponse, la je comprends mieux pourquoi je rentre dans le constructeur de la classe de base sans le mot clé super, est il possible que ça soit une spécificité de flex ou bien le java .NET le font aussi


merci encore pour tes précisions

Samy
En java, super() est toujours appelé si aucun autre appel à un autre constructeur n'est appelé (super(param) ou un this() par exemple)
Il n'est donc pas obligatoire de le préciser. Comme en AS3.
Kantizbak est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h01.


 
 
 
 
Partenaires

Hébergement Web