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

avec Java Discussion :

Question sur les classes (car problème lors de la compilation)


Sujet :

avec Java

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Question sur les classes (car problème lors de la compilation)
    Bonjour tout le monde,

    Je suis débutant en JAVA.

    Voici ma classe main :

    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
     
     
    package com.eclipsetotale;
     
    import com.eclipsetotale.Ville.Capitale;
     
    public class PremiereClasse {
     
    	public static void main(String[] args)
    	{		
     
    		Ville[] v = new Ville[6];
    		Ville[] tableau = new Ville[6];
    		String[] tab = {"Marseille","Lille","Caen","Lyon","Paris","Nantes"};
    		int[] tab2 = {123456,78456,654987,75832165,1594,213};
     
    		for(int i=0; i<6;i++)
    		{
    			if(i<3)
    			{
    				Ville V = new Ville(tab[i],tab2[i],"France");
    				tableau[i] = V;
    			}
    			else
    			{
    				Capitale C = new Capitale(tab[i],tab2[i],"France","Sarko");
    				tableau[i] = C;
    			}
    		}
     
    	}
     
     
    }
    J'ai un message d'erreur que voici :

    No enclosing instance of type 'Ville' is accessible. Must qualify the allocation with an encoding instance of type Ville.
    Je ne comprends pas ce message.

    Voici le code de ma classe Ville :

    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
    package com.eclipsetotale;
     
    public class Ville {
     
    	public static int nbreInstance = 0;
    	protected static int nbreInstanceBis = 0;
    	protected String nomVille;
    	protected String nomPays;
    	protected int nbreHabitant;
    	protected char categorie;
     
    	public Ville()
    	{
    		//On incrémente nos variables à chaque appel au constructeur
    		nbreInstance++;
    		nbreInstanceBis++;
     
    		System.out.println("Création d'une ville");
    		nomVille = "Inconnu";
    		nomPays = "Inconnu";
    		nbreHabitant = 0;
    	}
    	//constructeur d'instenciation
    	public Ville(String pNom, int pNbre, String pPays)
    	{
    		System.out.println("Création d'une ville avec des paramètres");
    		nomVille = pNom;
    		nomPays = pPays;
    		nbreHabitant = pNbre;
    	}
     
    	public static int getNbreInstance() 
    	{
    		return nbreInstance;
    	}
     
    	public static void setNbreInstance(int nbreInstance) {
    		Ville.nbreInstance = nbreInstance;
    	}
     
    	public static int getNbreInstanceBis() {
    		return nbreInstanceBis;
    	}
     
    	public static void setNbreInstanceBis(int nbreInstanceBis) {
    		Ville.nbreInstanceBis = nbreInstanceBis;
    	}
     
    	public String getNomVille() {
    		return nomVille;
    	}
     
    	public void setNomVille(String nomVille) {
    		this.nomVille = nomVille;
    	}
     
    	public String getNomPays() {
    		return nomPays;
    	}
     
    	public void setNomPays(String nomPays) {
    		this.nomPays = nomPays;
    	}
     
    	public int getNbreHabitant() {
    		return nbreHabitant;
    	}
     
    	public void setNbreHabitant(int nbreHabitant) {
    		this.nbreHabitant = nbreHabitant;
    	}
     
    	public char getCategorie() {
    		return categorie;
    	}
     
    	public void setCategorie(char categorie) {
    		this.categorie = categorie;
    	}
     
    	protected void setCategorie(){
    		int bornesSuperieures[] = {0,1000,10000,100000,500000,1000000,5000000,1000000000};
    		char categories[] = {'?','A','B','C','D','E','G','H'};
    		int i = 0;
    		while(i<bornesSuperieures.length && this.nbreHabitant >= bornesSuperieures[i])
     
    			i++;
     
    		this.categorie = categories[i];
    	}
     
    	class Capitale extends Ville
    	{
    		private String president;
    		public Capitale()
    		{
    			super();
    			president = "aucun";
    		}
     
    		public Capitale(String nom, int hab, String pays, String president)
    		{
    			super(nom,hab,pays);
    			this.president = president;
    		}
     
    	}
     
     
    }
    Je me demande si ce n'est pas à cause que j'ai mis ma classe "Capitale" dans ma classe "Ville" ?

    Si je la mets en dehors, j'ai ce message d'erreur :

    The import com.eclipstotale.Ville.Capitale cannot be resolved
    Merci d'avance pour votre aide.

    beegees

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    Je pense que ce n'est pas possible de le faire dans la même classe, sépare la classe Capital dans un fichier java à part.

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    Je pense que ce n'est pas possible de le faire dans la même classe, sépare la classe Capital dans un fichier java à part.
    Salut,

    Merci pour ta réponse.

    Je peux donc séparer les deux classes mais je suis obligé de mettre la classe Ville dans un fichier et la classe Capitale dans un autre ?

    Encore merci pour ton aide.

    beegees

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    Je me suis trompé, c'est possible de le faire dans le même fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Ville {
     
    ..
    }
     
    public class Capital extends Ville {
     
     
    }
    mais si tu commence, il vaut mieux mettre chaque classe dans un fichier.

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par Sniper37 Voir le message
    Je me suis trompé, c'est possible de le faire dans le même fichier
    Non : deux classes public ne peuvent pas être dans le même fichier.

    Il faut bien utiliser un fichier par classe public.


    Enfin, l'erreur venait du fait que les classes internes sont lié à une instance de la classe conteneur...


    En tant que débutant, évites cela et utilises une classe par fichier !

    a++

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,
    Non : deux classes public ne peuvent pas être dans le même fichier.

    Il faut bien utiliser un fichier par classe public.

    a++
    Ahh oui, c'est possible si l'une n'est pas déclarée public..
    mais pour les bonnes pratiques de programmation orienté objet, c'est à éviter.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Fais attention au static !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static class Capitale extends Ville {
      ...
    }
    Si tu ne fais pas ça, tu dois créer une Capitale comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Ville C = new Ville(...);
    C = C.new Capitale();
    Ce qui n'est certainement pas ce que tu souhaites

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Points : 95
    Points
    95
    Par défaut
    Pour instancier une classe interne, faut absolument passer par la classe externe. Tu peux donc faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Ville.Capitale c = new Ville().new Capitale();
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Ville ville = new Ville();
    Ville.Capitale c= ville.new Capitale();
    Le premier code est un raccourci

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Sauf que dans ce cas là il ne devrait pas y avoir de tel liens entre les deux classes ! Dans ce contexte une classe interne n'a aucun sens...


    Il est préférable d'utiliser deux classes séparées.

    a++

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Points : 95
    Points
    95
    Par défaut
    Je suis bien d'accord avec toi

Discussions similaires

  1. question sur les classes "static"
    Par Asmod_D dans le forum C++
    Réponses: 4
    Dernier message: 05/04/2009, 17h27
  2. Questions sur les classes.
    Par Lartiste007 dans le forum Débuter
    Réponses: 4
    Dernier message: 05/04/2009, 14h46
  3. Questions sur les classes.
    Par DarkSeiryu dans le forum Windows Forms
    Réponses: 8
    Dernier message: 06/02/2009, 09h21
  4. Un question sur les classes
    Par willycat dans le forum C++
    Réponses: 10
    Dernier message: 22/08/2008, 17h55
  5. Questions sur les classes en C#
    Par greg2 dans le forum C#
    Réponses: 11
    Dernier message: 05/11/2007, 19h57

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