8
votes

Comment puis-je déclarer correctement une instance d'une sous-classe?

Je fais actuellement une aventure textuelle en Java aux fins de l'utilisation d'une plate-forme de test, d'essayer de nouvelles choses que j'apprends de ce livre Java que je lis.

J'essaie maintenant de déclarer une instance d'une sous-classe (comme le joueur est script pour le trouver). La classe des parents est élément code> et il comporte deux sous-classes: arme code> et armure code>. P>

Cependant, peu importe que je Essayez de le déclarer, l'IDE que j'utilise (Eclipse) flagrie la ligne avec l'erreur suivante: p>

aucun instance de type d'élément de type est accessible. Doit qualifier l'allocation avec une instance de type d'élément de type enfermer (E.G.New a () où X est une instance d'élément). P> BlockQuote>

Lorsque j'essaie de le déclarer comme l'une des opérations suivantes: p> xxx pré>

pour référence La classe d'élément ressemble à ceci: p>

package JavaAIO;

public class Item 
{
    public String itemName;
    public double itemWeight;

    public class Weapon extends Item
    {
        public double damage;
        public double speed;
    }
    public class Armour extends Item
    {
        public double dmgResist;
        public double attSpdMod;    
    }
}


3 commentaires

Cela devrait être aussi pratique: télécharger.oracle.com/javase/taturial /java/javaoo/ntested.html


Merci pour cela, merci également à Wesley pour avoir édité mon extrait de code, il semble donc d'avoir raison.


Dupliqué possible de Java - aucune instance de type FOO est accessible < / a>


3 Réponses :


6
votes

Pour ce faire:

Item machinePistol = new Item();
Item machinePistol = new Weapon();
Item someArmour = new Armour();


1 commentaires

Wow, merci, la plupart des personnes gentilles ne pensaient pas que c'était aussi simple.



1
votes

Vous ne devriez pas déclarer les classes arme et armure intérieur élément . Il suffit de les déclarer dehors : xxx

afin que vous puissiez les installer comme ceci: xxx


3 commentaires

J'ai essayé cela aussi, mais cela dit simplement "l'armure de type public doit être définie dans son propre fichier"


@James Oui, vous devriez avoir un fichier pour chacune des trois classes que vous définissez car elles ne sont pas des classes intérieures.


Droite, je vais en une combinaison de cela et ce que certaines des réponses d'autres réponses ont dit, merci beaucoup que vous avez des gars très vite à répondre!



12
votes

"Pas d'instance de type d'élément de type est accessible. Doit qualifier l'allocation avec une instance de type d'élément de type (EGXNew a () où X est une instance d'élément) ."

C'est assez expliquant auto-expliquant: xxx

ou: xxx

Cependant, je vous recommande fortement de les mettre dans leurs propres classes afin que vous puissiez vous retrouver avec: xxx


3 commentaires

Cela fonctionne aussi, mais pourquoi vous recommandez-vous fortement de les mettre dans leurs propres cours?


Pour que vous puissiez créer une arme sans les frais généraux inutiles pour créer d'abord un article. De plus, les classes intérieures sont généralement censées utiliser par leur classe parent (sous) exclusivement. S'ils sont toujours utilisés à l'extérieur, il est grand temps de les refroidir dans leurs propres cours.


Déclarant les classes intérieures statique évite également le surcharge supplémentaire (vous permettant de les instantiez avec nouvel élément.weapon () - quel @Joel montre très bien dans sa réponse). Je suis toujours d'accord que dans ce cas, il serait préférable de les mettre de leur propre portée.