Classe, surchage, héritage, polymorphisme

tachag Messages postés 46 Date d'inscription samedi 11 décembre 2004 Statut Membre Dernière intervention 19 novembre 2005 - 3 août 2005 à 22:35
tachag Messages postés 46 Date d'inscription samedi 11 décembre 2004 Statut Membre Dernière intervention 19 novembre 2005 - 7 août 2005 à 21:12
Bonjour!


Bon alors je continue d'étudier mon beau petit livre de Java. J'ai un petit exercice et il mentionne de faire un fichier contenant les notions de classe et surcharge et un fichier contenant la notion de l'héritage et finalement un fichier contenant 'main' et exploiter les deux classes de façon à introduire le polymorphisme???


Compliqué? Avez-vous une idée avec quel exemple je pourrais ESSAYER de faire ca! Avec des voitures? Livres?


Je dois relire quelques pages hahaha!!!


J'ai essayé de faire une recherche sur ce site avec ces termes, mais la recherche n'a pas fonctionné.

Merci de votre aide!

12 réponses

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
3 août 2005 à 23:34
I - l'heritage

l'heritage est le fait qu'une sous classe possede par defaut les methodes de sa sur classe. par exemple:

class C1 {

public void maMethode() {

System.out.println("ma methode de la classe C1");

}

}



class C2 extends C1 {

public void maDeuxiemeMethode() {


System.out.println("ma deuxieme methode de la classe C2");

}

}





alors si tu cree un objet C2, tu pourra appeler sur celui ci les
methodes 'maMethode' et 'maDeuxiemeMethode', contrairement a un objet
C1 ou tu pourra juste appeler la 1ere.


II - La surchage

Ca consiste a faire des methodes dans les sous classes qui sont deja definies dans les sur classes. par exemple :

class C1 {

public void maMethode() {

System.out.println("ma methode de la classe C1");

}

}



class C2 extends C1 {

public void maMethode() { //surcharge de la methode 'maMethode'

super(); // si tu veu que l'appel de
'maMethode' sur un objet C2 fasse appel a 'maMethode' de C1

System.out.println("ma methode de la classe C2");

}

}

Si tu laisse le 'super()' dans la classe C2 et que tu appelle C2.maMethode, tu aura

ma methode de la classe C1

ma methode de la classe C2

si tu enleve le super, ca donnera juste

ma methode de la classe C2



III - Polymorphisme

Alors la je suis moins sur. il me semble que c'est le fait de "caster" tes objets. Si par exemple tu as le code suivant :

class C1 {

public C1 monObjet;

public void maMethode() {

System.out.println("ma methode de la classe C1");

}

}



class C2 extends C1 {

public void maDeuxiemeMethode() { //surcharge de la methode 'maMethode'
System.out.println("ma deuxieme methode de la classe C2");

}

}



et que tu stock dans monObjet un objet C2, alors tu pourra avoir acces
a 'maDeuxiemeMethode' en castant 'monObjet' de cette maniere :

(C2)monObjet.maDeuxiemeMethode();

Ceci dit, je ne suis pas sur du tout pour le polymorphisme...



j'espere avoir ete clair. Si tu veu des exemples plus precis, tu peu
remplacer 'C1' par 'vehicule', 'C2' par 'camion', 'maMethode' par
'faireLePleinDEssence' et 'maDeuxiemeMethode' par 'chargerLaCargaison'
:p



bon courage ;)
0
tachag Messages postés 46 Date d'inscription samedi 11 décembre 2004 Statut Membre Dernière intervention 19 novembre 2005
4 août 2005 à 00:06
Wow un gros merci!

J'ai essayé, mais j'ai des messages d'erreurs Qu'est-ce que 'caster' veut dire? Je suis québécoise....et je ne connais pas ce mot.

Ok disons que je sauvegarde mon exercice dans Jcreator sous le nom : Véhicules.

Et que je fais ce que tu m'as recommandé.
C1 = Véhicule
C2 = Camion
MaMéthode=Plein d'essence
MaDeuxièmeMéthode=changementhuile

Je fais copier/coller de ce que tu as écris mais dans l'odre suivant :

// Classe (je vais définir la classe, il ne devrait pas y avoir au début public static void main(String[] args) ?

Après, je vais faire une surchage

Ensuite, je vais faire l'héritage

Finalement le polymorphise.

Est-ce que ça du sens? Est-fesable?

Merci.
0
viking85 Messages postés 59 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 28 mars 2007 14
4 août 2005 à 10:26
salut.

je pense que tu a bien compris l'héritage et la surcharge de méthode.

astuce pour l'héritage : kan une classe hérite d'une autre tu peux dire "est un". ex : un camion "est un" véhicule.

Concernant le polymorphisme, je pense qu'il y a les notions de classe abstraite, je suis moins sur la dessus.

ex : dans un prog de dessin : t'a une classe abstraite Forme, et des classes filles Carre, Triangle, ... Dans ce prog tu utilisera Carre, Triangle, ... mais pas Forme.

j'essaie de me renseigner et je vous tien au courant.

a+,
Chris
0
viking85 Messages postés 59 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 28 mars 2007 14
4 août 2005 à 10:40
tu peux regarder les liens suivants qui parle d'héritage, de surcharge et de polyrmorphisme :


http://www.laltruiste.com/coursjava/modificateur_abstract.html' target='_blank'>http://www.laltruiste.com/document.php?url=http://www.laltruiste.com/coursjava/modificateur_abstract.html


http://www.laltruiste.com/coursjava/methode_surcharge.html' target='_blank'>http://www.laltruiste.com/document.php?url=http://www.laltruiste.com/coursjava/methode_surcharge.html


http://www.laltruiste.com/coursjava/methode_outrepassement.html' target='_blank'>http://www.laltruiste.com/document.php?url=http://www.laltruiste.com/coursjava/methode_outrepassement.html


http://www.laltruiste.com/coursjava/classe_abstraite.html' target='_blank'>http://www.laltruiste.com/document.php?url=http://www.laltruiste.com/coursjava/classe_abstraite.html


http://www.laltruiste.com/coursjava/classe_heritage.html' target='_blank'>http://www.laltruiste.com/document.php?url=http://www.laltruiste.com/coursjava/classe_heritage.html


http://www.sogid.com/javalist/fils2000/definition_polymorphisme.html

voilà.
en espérant que cela t'aide.
Chris.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
4 août 2005 à 10:52
tien javai ca comme lien ;o)
http://hdd34.developpez.com/cours/artpoo/#L1.3.3

c est plus simple je pense .. ;o)

GodConan
0
viking85 Messages postés 59 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 28 mars 2007 14
4 août 2005 à 11:11
Merci GodConan, c effectivement plus simple.
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
4 août 2005 à 20:51
j'ai regarde vite fait le cours de developpez.com, mais c sur la
POO et pas juste java. Donc, en java (et dans d'autres langages de
POO), voici ce qu'il en est :

- Pour les classes, tu dois avoir un fichier par classe (sauf les classes internes). par exemple,

public class MaClasse {

...

private class maClasseInterne {

...

}

}

Ce code doit absolument se trouver dans un fichier nommé "MaClasse.java"



- En ce qui concerne le main, c'est une methode a ajouter dans la
classe que tu veu lancer en ligne de commande. par exemple si tu as les
classes Class1, Class2, Class3, et que tu veu lancer ton prog grace a
la Class3 (>java Class3), alors ta classe devra contenir la methode main. c'est a dire :

public class Class3 {

...

public static void main(String args[]) {

//ici tu peu mettre le
code a executer au lancement de ton prog (en general des new ..., sinon
ca sert a rien de faire de la POO :p)

}

}



- Quant au mot "caster", ca vien de l'anglais "to cast", ce qui veut
dire en gros "convertir", "transtyper", mais ca tu dois le savoir mieux
que moi, vu la difference de maitrise de l'anglais entre les francais
et les quebecois!!! Le principe, c'est que, comme le dit viking, un
camion 'est un' vehicule. donc par exemple tu peu creer un camion: Vehicule c1 = new Camion();
mais il est enregistrer en tant que vehicule (mais reste tt de meme un
camion). donc si tu veu avoir acces aux champs et methodes de la classe
camion pour c1, il faut que tu le cast: (Camion)c1.changementHuile();. Si tu met pas le (Camion) devant, il ne trouvera pas la methode changementHuile qui n'appartient pas a la classe de c1 (la classe camion).




Pour le code que je t'ai mis ds mon 1er message, c'est juste un exemple
qui ne marche pas. je te mettrai ptetre un bout de code fonctionnel en
exemple si g le tps tt a l'heure.



j'espere avoir ete clair



bye :)
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
4 août 2005 à 23:11
bon voila un ptit exemple :



Vehicule.java

public abstract class Vehicule {
protected String carburant;
protected String marque;


protected Vehicule(String marque, String carburant) {
this.carburant = carburant;
this.marque = marque;
}
public void klaxoner() {
System.out.println(this.marque + " klaxone");
}
public void avancer() {
System.out.println("le vehicule " + this.marque + " avance");
}
public abstract void fairePlein();
}


Camion.java

public class Camion extends Vehicule {
public Camion(String marque, String carburant) {
super(marque, carburant);
}
public void changerHuile() {
System.out.println("Le camion " + this.marque + " a changer l'huile");
}
public void fairePlein() {
System.out.println("le camion " + marque + " a fait le plein de " + carburant);
}
public void avancer() {
System.out.println("le camion " + this.marque + " roule");
}
}


Avion.java

public class Avion extends Vehicule {
public Avion(String marque) {
super(marque, "kerosene");
}
public void changerHelice() {
System.out.println("L'avion " + this.marque + " a changer d'helice");
}
public void fairePlein() {
System.out.println("l'avion " + marque + " a fait le plein de " + carburant);
}
public void avancer() {
System.out.println("l'avion " + this.marque + " vole");
}
}


MainClass.java

public class MainClass {
public static void main(String args[]) {
Camion c1;
Avion a1;
Vehicule v1, v2;
c1 = new Camion("Renault", "diesel");
a1 = new Avion("Boeing");
v1 = new Camion("Peugeot", "essence");
v2 = new Avion("Airbus");


//Heritage
System.out.println("\n--- Heritage ---\n");
c1.klaxoner();
a1.klaxoner();
v1.klaxoner();
v2.klaxoner();


//surcharge
System.out.println("\n--- Surcharge ---\n");
c1.avancer();
a1.avancer();
v1.avancer();
v2.avancer();



//polymorphisme
System.out.println("\n--- Polymorphisme ---\n");
c1.fairePlein();
a1.fairePlein();
v1.fairePlein();
v2.fairePlein();
}
}

pour le lancer, tu a juste a taper

java MainClass

apres avoir compile bien sur (javac *.java) ;)
0
tachag Messages postés 46 Date d'inscription samedi 11 décembre 2004 Statut Membre Dernière intervention 19 novembre 2005
6 août 2005 à 18:46
Wow un gros merci tous de votre aide.

Bon ok je vais aller visiter les liens. Je pense être plus certaine maintenant.

Guillemouze, je vais essayer ton exemple.

Je vais travailler là-dessus et peut-être essayer avec des animaux?

Exemple :

Animaux
sous-classe : chien et chat
chien et chat : manger, dormir
chien : jappe
chat : miaule

Je pourrais afficher les résultats dans un tableau?

Je vous reviens plus tard..!

Merci encore.
0
tachag Messages postés 46 Date d'inscription samedi 11 décembre 2004 Statut Membre Dernière intervention 19 novembre 2005
6 août 2005 à 22:36
OK, voici ce que j'ai fait à partir de mon livre. C'est drôle Guillemouze, mais mon livre n'expliquait pas de la même façon??

Alors, ici j'ai défini une classe, j'ai fait un héritage et du polymorphise. Je me mélange avec la surcharge un peu. Que dois-je ajouter pour avoir une surcharge?

Voir le message d'erreur à la fin du code :

class Vehicule
{
// définition des attributs
String marque;
fonctionnement;
caracteristique;

// Constructeur
Vehicule(String saMarque,sonFonctionnement,saCaracteristique)
{
marque= saMarque;
fonctionnement=sonFonctionnement;
caracteristique=SaCaracteristique;
}

// définition des méthodes
void getInformation()
{


System.out.println("");
System.out.println("Information sur les véhicules:");
System.out.println("Marque:" + marque);
System.out.println("Fonctionnement:" + fonctionnement);
System.out.println("Caracteristique:" + caracteristique);
}



} // fin de la classe Vehicule





class Camion extends Vehicule
{
// définition des attributs
String vitesse;


// Constructeur
Camion(String saMarque,String sonFonctionnement,String saCaracteristique,String saVitesse)
{
// Appel du constructeur de la classe de base: Vehicule
super(saMarque,sonFonctionnement,saCarateristique);



vitesse =saVitesse;

}


// définition des méthodes
void getInformation()
{
System.out.println("");
System.out.println("Information sur le camion:");
System.out.println("Marque:" + marque);
System.out.println("Fonctionnement:" + fonctionnement);
System.out.println("Caracteristique:" + caracteristique);
System.out.println("Vitesse:" + vitesse);
System.out.println("");
}


} // fin de la classe Camion





class Avion extends Vehicule
{
// définition des attributs
String hauteur;


// Constructeur
Avion(String saMarque,String sonFonctionnement,String saCaracteristique,String saHauteur)
{
// Appel du constructeur de la classe de base: Vehicule
super(saMarque,sonFonctionnement,saCarateristique);



hauteur= saHauteur;

}


// définition des méthodes
void getInformation()
{
System.out.println("");
System.out.println("Information sur l'avion:");
System.out.println("Marque:" + marque);
System.out.println("Fonctionnement:" + fonctionnement);
System.out.println("Caracteristique:" + caracteristique);
System.out.println("Hauteur:" + hauteur);
System.out.println("");
}


} // fin de la classe Avion






public class Information
{
public static void main(String[] args)
{
// tonVehicule va faire référence à un objet de type Camion
// monVehicule va faire référence à un objet de type Avion


Vehicule monVehicule;
Vehicule tonVehicule =new Vehicule ("Ford","Roule","Transporteur", 200);


tonVehicule.getInformation();


monVehicule = new Camion ("Airbus","Vole","Transporteur", 40000);
monVehicule.getInformation();




}



}

Alors j'ai le message d'erreur suivant :

C:\j2sdk1.4.2_08\Information.java:5: expected
fonctionnement;
^
C:\j2sdk1.4.2_08\Information.java:6: expected
caracteristique;
^
C:\j2sdk1.4.2_08\Information.java:9: expected
Vehicule(String saMarque,sonFonctionnement,saCaracteristique)
^
C:\j2sdk1.4.2_08\Information.java:26: ')' expected
^
4 errors

Quelqun peut m'aider?
merci!
0
tachag Messages postés 46 Date d'inscription samedi 11 décembre 2004 Statut Membre Dernière intervention 19 novembre 2005
7 août 2005 à 00:14
OK LE CODE FONCTIONNE!!

Mais, comment ajouter une surcharge??

Le voici :

class Vehicule
{
// définition des attributs
protected String marque;
protected String fonctionnement;


// Constructeur
Vehicule(String saMarque,String sonFonctionnement)
{
marque=saMarque;
fonctionnement=sonFonctionnement;

}

// définition des méthodes
void getInformation()
{


System.out.println("");
System.out.println("Information sur les véhicules:");
System.out.println("Marque:" + marque);
System.out.println("Fonctionnement:" + fonctionnement);
}
}

// fin de la classe Vehicule


class Camion extends Vehicule
{
// définition des attributs
String vitesse;


// Constructeur
Camion(String saMarque,String sonFonctionnement,String saVitesse)
{
// Appel du constructeur de la classe de base: Vehicule
super(saMarque,sonFonctionnement);



vitesse=saVitesse;

}


// définition des méthodes
void getInformation()
{
System.out.println("");
System.out.println("Information sur le camion:");
System.out.println("Marque:" + marque);
System.out.println("Fonctionnement:" + fonctionnement);
System.out.println("Vitesse:" + vitesse);
System.out.println("");
}


} // fin de la classe Camion


class Avion extends Vehicule
{
// définition des attributs
String hauteur;


// Constructeur
Avion(String saMarque,String sonFonctionnement,String saHauteur)
{
// Appel du constructeur de la classe de base: Vehicule
super(saMarque,sonFonctionnement);



hauteur=saHauteur;

}


// définition des méthodes
void getInformation()
{
System.out.println("");
System.out.println("Information sur l'avion:");
System.out.println("Marque:" + marque);
System.out.println("Fonctionnement:" + fonctionnement);
System.out.println("Hauteur:" + hauteur);
System.out.println("");
}


} // fin de la classe Avion



public class Information
{
public static void main(String[] args)
{
// tonVehicule va faire référence à un objet de type Camion
// monVehicule va faire référence à un objet de type Avion


Vehicule monVehicule;
Vehicule tonVehicule=new Camion ("Ford","Roule","200 km/h");


tonVehicule.getInformation();


monVehicule=new Avion ("Airbus","Vole","40000 pieds");
monVehicule.getInformation();




}



}
0
tachag Messages postés 46 Date d'inscription samedi 11 décembre 2004 Statut Membre Dernière intervention 19 novembre 2005
7 août 2005 à 21:12
Quelqu'un a une idée?

Je travaille sur ceci depuis quelques jours....

Merci.
0
Rejoignez-nous