No enclosing instance of type is accessible

Résolu/Fermé
domxaline - Modifié par jipicy le 10/02/2014 à 11:44
 domxaline - 10 févr. 2014 à 18:44
Bonjour,
en compilant mon prg,j'ai eu cette erreur, veuillez m'aidez svp:

"No enclosing instance of type Personnage is accessible. Must qualify the allocation with an enclosing instance of type Personnage
(e.g. x.new A() where x is an instance of Personnage)."

public abstract class Personnage 
{
 public void seDeplacer()
 {
  System.out.println("Je me déplace à pied.");
 }
 
 public  void combattre()
 {
  System.out.println("Je ne combat pas!");
 } 
 public class Guerrier extends Personnage
 {
  public void combattre()
  {
   System.out.println("Fusil,Pistolet,Couteau! Tous ce que tu veux!");
  }
  
 } 
 public class Medecin extends Personnage
 {
  public void combattre()
  {
   System.out.println("Vive le scalpel!");
  }
  
  public void soigner()
  {
   System.out.println("Je soigne les blessures.");
  }
 } 
 public class Civil extends Personnage
 {
  public void combattre()
  {
   System.out.println("Je ne combat pas!");
  }
  public void seDeplacer()
  {
   System.out.println("Je me déplace à pied.");
  }
 } 
 public class Chirurgien extends Personnage
 {
  public void combattre()
  {
   System.out.println("Je ne combat pas!");
  }
  public void seDeplacer()
  {
   System.out.println("Je me déplace à pied.");
  }
  public void soigner()
  {
   System.out.println("Je fais des opérations.");
  }
 } 
 public class Sniper extends Personnage
 {
  public void combattre()
  {
   System.out.println("Je me sers de mon fusil à lunette!");
  }
  public void seDeplacer()
  {
   System.out.println("Je me déplace à pied.");
  }
 } 
 public static void main(String[]args)
 {
  Personnage[]tPers=
  {new Guerrier(),new Chirurgien(),new Civil(),new Sniper(), new Medecin()};
  for(Personnage p:tPers)
  {
   System.out.println("\nInstance de "+p.getClass().getName());
   System.out.println("******************************************************");
   p.combattre();
   p.seDeplacer();
  }
 } 
}

A voir également:

9 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
9 févr. 2014 à 19:21
Le problème c'est que tu as fait

public class A
{
     public class B
     {
     }
}

B b = new B();

Or cela n'est pas possible, car les objets de B doivent dépendre des objets de A.

Il faudrait faire :

A a = new A();
B b = a.new B();

Or dans ton cas c'est impossible car A est une classe abstraite ! Il faudrait donc utiliser une implémentation de A, mais les seules implémentations que tu as c'est B...

Première solution, tu considères que la classe B est static, elle ne dépend donc plus des objets de A mais de la classe, il n'est donc plus nécessaire d'instancier un objet A.

public class A
{
     public static class B
     {
     }
}

A.B b = new A.B();

Deuxième solution, qui est à mon avis la meilleure dans ton cas, tu ne fais pas de classes internes, mais tu mets chaque classe dans son propre fichier.

public class A
{
}

public class B
{
}

B b = new B();
6