No enclosing instance of type is accessible
Résolu
domxaline
-
domxaline -
domxaline -
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)."
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();
}
}
}
9 réponses
-
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();