tachag
Messages postés46Date d'inscriptionsamedi 11 décembre 2004StatutMembreDernière intervention19 novembre 2005
-
3 août 2005 à 22:35
tachag
Messages postés46Date d'inscriptionsamedi 11 décembre 2004StatutMembreDernière intervention19 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é.
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 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
viking85
Messages postés59Date d'inscriptionlundi 20 novembre 2000StatutMembreDernière intervention28 mars 200714 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.
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 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.
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");
tachag
Messages postés46Date d'inscriptionsamedi 11 décembre 2004StatutMembreDernière intervention19 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;
// 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);
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
// 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);
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