Rechercher : dans
Par :

[JAVA] Héritage

Dernière réponse le 15 jan 2009 à 23:37:17 JulienZ, le 15 aoû 2007 à 21:23:30 
 Signaler ce message aux modérateurs

Bonjour à tous.

Je débute en Java. Je suis en train d'essayer de comprendre le concept d'héritage.
J'ai essayé de faire un petit programme, mais j'ai des problèmes à la compilation que je n'arrive pas à résoudre. Je code sous Windows sous Eclipse.

Les erreurs sont de ce type : Constructor call must be the first statement in a constructor

Voici le code :
public class Cercle {
public static float pi = 3.1416f;
protected float rayon;

public float Affiche(){ return this.rayon; }

public Cercle(float rayon) { this.rayon = rayon; }

public Cercle(){ this.rayon=1;}

public float surface() { return rayon * rayon * pi; }
}


public class SousCercle extends Cercle{

private float sousRayon;
public void SousCercle(){
super(2);
this.sousRayon=1;
}
public void SousCercle(float rayon){
super(rayon);
this.sousRayon=1;
}
public void SousCercle(float rayon, float sousRayon){
super(rayon);
if(super.rayon>sousRayon){
this.sousRayon=sousRayon;}
else
{
this.sousRayon=0;
}
}
public float SousSurface(){ return super.pi*super.pi*sousRayon;}
public float Affiche(){
return sousRayon;
}
}

Je vous remerci à tous pour votre aide.


Julien

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « [JAVA] Héritage » dans :
POO - Héritage Voir La notion d'héritage L'héritage (en anglais inheritance) est un principe propre à la programmation orientée objet, permettant de créer une nouvelle classe à partir d'une classe existante. Le nom d'"héritage" (pouvant parfois être appelé dérivation...
Installer Java sous Ubuntu VoirPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ...
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
[Logiciel libre] Installation firefox 2.0+java+flash VoirInstallation firefox 2.0+java+flash en ligne de commande A. INTRODUCTION B. INSTALLATION FIREFOX 1. Création d'environnement 2. Téléchargement et vérification de la signature 3. Installation de Firefox 4. Démarrage de l'application C....
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...
Java - Les types de données VoirLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...
J2EE - Java 2 Enterprise Edition VoirIntroduction au Java Framework Le «Java Framework» (Java 2 Platform) est composé de trois éditions, destinées à des usages différents : J2ME : Java 2 Micro Edition est prévu pour le développement d'applications embarquées, notamment sur des...

1

Bj0, le 16 aoû 2007 à 13:46:36
  • +1

A premiere vu ton code me parais pas mal ... peu tu nous mettre le ou les messages d'erreurs que tu a lors de la compilation?

Répondre à Bj0

2

JulienZ, le 16 aoû 2007 à 15:36:03
  • +1

Salut

Les erreurs que j'obtient sont situées dans la classe SousCercle sur chacun de mes trois constructeurs il me met : Constructor call must be the first statement in a constructor.

Merci beaucoup de votre aide

Julien

Répondre à JulienZ

3

kilian, le 16 aoû 2007 à 16:25:26
  • +1

 public void SousCercle()
 public void SousCercle(float rayon)
 public void SousCercle(float rayon, float sousRayon)

Attention, un constructeur n'a pas de type, pas même void.
Faut transformer ces trois trucs là en:
public SousCercle()
public SousCercle(float rayon)
public SousCercle(float rayon, float sousRayon)
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

4

kilian, le 16 aoû 2007 à 16:48:18
  • +2

Autre chose: pourquoi super.rayon?
Dans une instance de SousCercle, il ya un attribut rayon qui est hérité de cercle mais qui est propre à l'instance courante de SousCercle. Utilise plutôt this.rayon.

Le super sert surtout pour appeler des méthodes du parent. En fait c'est utilisé en cas de redéfintion de méthode pour exécuter ce qu'aurait fait le parent tout en rajoutant du code plus spécialisé.
Tiens, un exemple:

class Medecin
{
    public quiSuisJe()
    {
         System.out.println("Je suis un médecin");
     }
}

class Pediatre extends Medecin()
{
    public quiSuisJe()
    {
        super.quiSuisJe()
        System.out.println("Et je soigne les enfants");
     }
}

class MonProgramme
{
    public static void main(String[] args)
    {
         Medecin m = new Pediatre();
         m.quiSuisJe(); //Affiche: Je suis médecin Et je soigne les enfants.
     }
}


Voilà, en gros, le super sert à compléter l'implémentation du parent. Mais pour l'accés aux attributs d'instance c'est inutile.
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

6

k-23, le 15 jan 2009 à 23:14:51

Escuse pourquoi dans m.quiSuiJe();

tu met le m

merci de répondre

Répondre à k-23

7

kilian, le 15 jan 2009 à 23:33:46

En fait j'ai créé une instance de type Pediatre que j'ai affecté à m
Puis je fais m.quiSuisJe() pour executer sa méthode. Si j'avais fait quiSuisJe() sans le m. ça n'aurait pas eu de sens, on ne peut pas appeller de méthode d'un objet alors qu'on a instancié aucun objet, car cette méthode peut faire référence à des variables dont les valeurs seront propres à l'objet en question.

Par exemple si j'ai deux objets m et n de type Pediatre, il n'est pas dit que la variable "age" aura la même valeur pour les deux. Deux pédiatre peuvent ne pas avoir le même âge.

Tu vois ce que je veux dire?
Je peux te faire un exemple si tu veux. Ce message ne mange ni trop gras, ni trop salé, ni trop
sucré .Pour sa santé il bouge plus et mange 5 fruits et 
légumes par jour.

Répondre à kilian

8

 k-23, le 15 jan 2009 à 23:37:17

Lol javais pas remarqué l'affectation

merci

Répondre à k-23

5

JulienZ, le 16 aoû 2007 à 17:22:27

Merci beaucoup. Je vais continuer à m'entraîner la dessus.
;)

Julien

Répondre à JulienZ