2016-05-14 1 views
0

J'ai une requête: nous pouvons accéder à toutes les méthodes de la classe enfant à l'aide vers le bas casting envisager le code suivant Classe de base:Comment accéder à toutes les méthodes enfants en utilisant un seul objet?

public class BaseClass { 

    public void method() { 
     System.out.println("Base class"); 
    } 
} 

ChildOne:

public class ChildOne extends BaseClass { 
    @Override 
    public void method() { 
     System.out.println("inside ChildOne"); 
    } 
} 

ChildTwo:

public class ChildTwo extends BaseClass { 

    @Override 
    public void method() { 
     System.out.println("inside ChildTwo"); 
    } 
} 

Et la classe client

try { 
    List l = new ArrayList(); 
    l.add(new BaseClass()); 
    l.add(new ChildOne()); 
    l.add(new ChildTwo()); 

    for (Object o : l) { 
     BaseClass bc = (BaseClass) Class.forName(o.getClass().getName().toString()).newInstance(); 
     bc.method(); 
    } 
} catch (Exception e) { 

} 

outPut : 

Base class 
inside ChildOne 
inside ChildTwo 

maintenant la question si

public abstract class BaseClass { 

     public abstract void method(); 
    } 

que nous ne pouvons pas créer l'objet de l'une ou l'interface de la classe abstraite. Dans le code ci-dessus, je suis en mesure d'accéder à toutes les méthodes de toutes les classes. Considérons que nous avons une interface nommée BaseClass avec la définition de la méthode que je suis J'implémente cette interface dans plusieurs classes maintenant la question est comment je peux accéder à toutes les méthodes sans créer d'instance particulière de chaque classe Je veux faire cela en boucle simple mais l'héritage ne nous le permet pas Comment faire cela?

Répondre

2

Vous devez utiliser une liste de type générique (BaseClass): List<BaseClass> l = new ArrayList<>();

est Polymorphisme en action, la boucle ressemblera:

for (BaseClass o : l) o.method(); 
+1

ici est BaseClass ** abstrait ** classe et La méthode est ** abstract ** aussi – emotionlessbananas

+0

@holidayCoder, oui, mais la liste contiendra des implémentations terminées de 'BaseClass' qui implémenteront toutes les méthodes abstraites du parent – Andrew

+1

l'a obtenu, merci pour l'aide – emotionlessbananas