IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[Language]question sur public et extend


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Points : 100
    Points
    100
    Par défaut [Language]question sur public et extend
    j ai un code conposer de 4 classes et je voudrait declarer chaque classe public mais quand je le fait il me retourne une erreur disant que je doit enregistrer le ficher sous le non de 3 differente autre classe.
    Comment faire ????

    ensuite j aimerais acceder a un parametre (capaciteMegaOctet) qui est calculer dans la sous classe DisqueDur pour l utiliser dans la sous classe CDRW


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    public abstract class Support{
     
    	// quantité de données contenues sur le disque
    	protected int occupation;
     
    	// constructor
    	public Support(){
    		occupation = 0;
    	}
     
    	// la capacité du support
    	public abstract int capacite();
     
    	// sauvegarde de données, s'il y a suffisamment d'espace
    	public boolean sauvegarder(int taille){
     
    		if (capacite() - occupation >= taille){
    			occupation += taille;
    			return true;
    		}
    		return false;
    	}
     
    	// affichage de l'espace disponible
    	public String toString(){
     
    		int cap = capacite();
    		return (cap - occupation) +
    			" MB libres sur un total de " + cap + " MB libres";
    	}
    }
     
     
    class DVDR extends Support{
     
    	// nombre de layers du DVD
    	private boolean doubleCouche;
     
    	// constructor
    	public DVDR(boolean doubleCouche){
    		this.doubleCouche = doubleCouche;
    	}
     
    	// 4.7GB par layer
    	public int capacite(){
    		return 4489 * (doubleCouche ? 2 : 1);
    	}
     
    	// affichage
    	public String toString(){
    		return "DVD-R " + (doubleCouche ? "Dual Layer" : "")+ "\n\t" + super.toString();
    	}
    }
     
     
    public class DisqueDur extends Support{
     
    	// nombre de piste, de plateau et de cylindre
    	private int nbPiste, nbPlateau, nbCylindre;
     
     
    	//constructeur
    	public DisqueDur(int nbPiste, int nbPlateau, int nbCylindre){
    		this.nbPiste = nbPiste;
    		this.nbPlateau = nbPlateau;
    	    this.nbCylindre  = nbCylindre;
     
        }
     
     
        // capacite du disque dur en mega octet
        public int capacite(){
    		int capaciteMegaOctet = nbPiste * nbPlateau * nbCylindre / 1024 ;
    		return capaciteMegaOctet ;
     
        }
     
        // redefinition de toString pour l affichage
        public String toString(){
    			return "DisqueDur " +  "\n\t" + super.toString();
    	}
     
    }
     
    public class CDRW extends Support {
     
    	// nombre de minute
    	private int nbMinutes;
     
    	//constructor
    	public CDRW(int nbMinutes){
    		this.nbMinutes = nbMinutes;
     
        }
     
        // capacite du cd-rw en minutes
    	public int capacite(){
    		return (capaciteMegaOctet )/ 8.75;
        }
     
     
        // redefinition de la methode toString pour l affichage
    	public String toString(){
    		return "CR-RW " +  "\n\t" + super.toString();
    	}
     
     
    }
     
     
    public class Sauvegarde{
     
    	public static void main(String[] args)
    	{
    		Support[] supports = {
    			new DVDR(false),
    			new DisqueDur(427, 4, 32767),
    			new CDRW(74),
    			new DisqueDur(383, 3, 28671),
    			new DVDR(true),
    			new CDRW(80)
    		};
     
    		for (int i = 0; i < 10; i++)
    			for (int j = 0; j < supports.length; j++)
    				supports[j].sauvegarder((int) (Math.random() * 300) + 200);
     
    		System.out.println("Les supports apres quelques ecritures:\n");
    		for (int j = 0; j < supports.length; j++)
    			System.out.println(supports[j]);
    	}
    }


    C:\Documents and Settings\Comps\My Documents\1170-tp3\exo2\Sauvegarde.java:19: class Support is public, should be declared in a file named Support.java
    public abstract class Support{
    ^
    C:\Documents and Settings\Comps\My Documents\1170-tp3\exo2\Sauvegarde.java:74: class DisqueDur is public, should be declared in a file named DisqueDur.java
    public class DisqueDur extends Support{
    ^
    C:\Documents and Settings\Comps\My Documents\1170-tp3\exo2\Sauvegarde.java:103: class CDRW is public, should be declared in a file named CDRW.java
    public class CDRW extends Support {
    ^
    C:\Documents and Settings\Comps\My Documents\1170-tp3\exo2\Sauvegarde.java:116: cannot resolve symbol
    symbol : variable capaciteMegaOctet
    location: class CDRW
    return (capaciteMegaOctet )/ 8.75;
    ^
    C:\Documents and Settings\Comps\My Documents\1170-tp3\exo2\Sauvegarde.java:116: possible loss of precision
    found : double
    required: int
    return (capaciteMegaOctet )/ 8.75;

  2. #2
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    C'est une règle de base en Java : il ne peut pas y avoir plus d'une classe public par fichier source Java. Alors si tu dois vraiment les déclarer dans un seul fichier les autres classes doivent avoir une visibilité package et ton fichier java doit porter le même nom que ta classe publique.
    Sinon d'une façon générale il est très très recommandé de déclarer chaque classe dans un fichier séparé.

    Bon courage @+++
    Sébastien ARBOGAST
    SCJP

  3. #3
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Points : 100
    Points
    100
    Par défaut
    si je declare chaque classe dans des fichier separer comment faire l appel des des methodes de ces classes dans la classe principale ?? dois je les importer????

    et aussi en faissant sa comment est ce qu on peut utiliser les parametre d une classe dans une autre

  4. #4
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    Hey hey mon gars c'est de l'objet que tu fais là, pas du procédural ! Fini le C ou le fortran lol
    Si tu déclares tes classes dans plusieurs fichiers différents, du moments qu'elles sont publiques, et que tes classes sont déclarées dans le même package tu peux tout à fait accéder aux méthodes publiques de l'une depuis une autre.
    J'ai pas regardé ton code encore mais essaie déjà de mettre chaque classe dans un fichier différent, tu mets tous les fichiers java dans le même dossier et depuis ce dossier tu fais

    javac *.java

    puis

    java Sauvegarde

    Et dis moi si tu as des erreurs ou quoi, on verra d'ici là...

    Mais il faut bien comprendre que c'est là tout l'intéret de la programmation orientée objet, surtout qu'en java, tout est objet. Et vive la modularité !
    Sébastien ARBOGAST
    SCJP

  5. #5
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Points : 100
    Points
    100
    Par défaut
    oui merci le probleme de classe public est resolu

    il me reste a savoir comment acceder au parametre capaciterMegaOctet que j ai calculer ds DisqueDur et je veux utiliser dans CDRW

  6. #6
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    Et ben il te suffit d'appeler la méthode capacite() sur un objet de classe DisqueDur à l'endroit où tu en as besoin... non ?
    Sébastien ARBOGAST
    SCJP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. question sur la relation extend
    Par ferhat.adel dans le forum Débuter
    Réponses: 3
    Dernier message: 11/04/2011, 08h50
  2. Réponses: 2
    Dernier message: 15/07/2008, 14h43
  3. Question sur extends
    Par idefix54 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 15/07/2008, 13h20
  4. Question sur la méthode extends
    Par Djule dans le forum Langage
    Réponses: 4
    Dernier message: 04/02/2007, 16h01
  5. [DTD] question sur l'identificateur externe PUBLIC
    Par ertyup dans le forum Valider
    Réponses: 1
    Dernier message: 18/01/2007, 08h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo