2011-08-28 3 views
1

Excuses si ma terminologie est incorrecte, j'ai seulement commencé Java (et la programmation OO en général) il y a 6 semaines.Utilisation d'objets/classes héritées dans les listes liées

Un devoir à la maison m'a donné une classe d'interface:

public interface Example { 
    void Function(); 
    //etc 
} 

Et puis j'ai deux ou trois classes qui "mettre en œuvre" cette classe d'interface, par exemple:

public class myExample1 implements Example { 
    void Function(){ stuff;} 
    public void myExclusiveFunction() { stuff;} 
     ... 
} 

intérieur de la classe myExample1 , Je définis les fonctions à l'intérieur Example, mais aussi ajouter des fonctions spécifiques à la classe myExample1. Dans mon programme principal, j'ai créé un LinkedList<Example> eList = new LinkedList<Example>. Dans cette liste liée, je stocke plusieurs types d'exemples (monExemple1, monExemple2, etc.). Je veux faire quelque chose comme:

eList.get(i).myExclusiveFunction(); 

Cependant, cela ne fonctionnera pas. Le compilateur me dit:

La méthode myExclusiveFunction() est indéfinie pour le type Example.

Comment puis-je utiliser cette fonction? Je veux vraiment que LinkedList soit capable de contenir des objets de n'importe quelle sous-classe d'exemple, et je suis sous une restriction d'affectation pour NE PAS éditer l'interface exemple.

Répondre

2

Eh bien, vous avez 2 options:

1 - Changez votre LinkedList pour stocker myExample1 au lieu de Example.

LinkedList<myExample1> eList 

2 - Utilisation instanceof et jette la classe du type myExample1 (désordonné).

Example exObj = eList.get(i); 
if (exObj instance of myExample1) { 
    ((myExample1)exObj).myExclusiveFunction(); 
} 
+0

Avec l'option 2, seront les modifications apportées aux membres à l'intérieur du 'exObj' appliquer à l'objet dans la liste chaînée? ie puis-je utiliser cette méthode pour effectuer des fonctions qui modifient le contenu de l'objet? – Paul

+0

Vous opérez sur l'objet qui existe encore dans LinkedList, donc oui toutes les modifications apportées à exObj seront reflétées dans LinkedList. –

1

Vous avez besoin d'en savoir plus sur la diffusion en Java. Le vôtre ne fonctionne pas car myExclusiveFunction() n'existe que dans Example et non dans myExample1 (vous pourriez vouloir suivre la bonne convention Java Naming ici)

Lorsque vous obtenez l'élément de la liste eList.get (i), vous obtiendra Example comme un type de retour et pas myExample1. Pour utiliser myExclusiveFunction(), vous devez d'abord convertir le type de Example en myExample1. Rechercher "type coulée en Java" ou "opérateur de casting" dans Google

1

mettre la logique myExclusiveFunction à l'intérieur Fonction().

vous ne pouvez appeler des fonctions qui sont dans l'interface comme fonction

Questions connexes