2016-05-14 10 views
0

Ich habe eine Abfrage: wir alle Methoden von Kind Klasse betrachten folgende Code Basis Casting-Klasse mit nach unten zugreifen:Wie kann mit einem einzigen Objekt auf alle untergeordneten Methoden zugegriffen werden?

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"); 
    } 
} 

Und Client-Klasse

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 

nun die Frage, was passiert, wenn

public abstract class BaseClass { 

     public abstract void method(); 
    } 

, da wir nicht Gegenstand der entweder Schnittstelle oder der abstrakten Klasse erstellen können. Im obigen Code kann ich auf alle Methoden aus allen Klassen zugreifen. Betrachten wir haben Schnittstelle genannt BaseClass mit Methodendefinition, wie ich bin, dass ich diese Schnittstelle in vielen Klassen jetzt die Frage einführe, wie ich auf alle Methoden zugreifen kann, ohne bestimmte Instanz jeder Klasse zu schaffen Ich möchte das in Einzelschleife tun aber Vererbung wird uns nicht erlauben Wie geht das?

Antwort

2

Sie müssen eine Liste mit generischen Typ verwenden (BaseClass): List<BaseClass> l = new ArrayList<>();

Polymorphie in Aktion ist, wird die Schleife wie folgt aussehen:

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

hier Baseclass ** abstrakt ** Klasse und Methode ist ** abstrakt ** zu – emotionlessbananas

+0

@holidayCoder, ja, aber die Liste wird abgeschlossene Implementierungen von 'BaseClass' enthalten, die alle abstrakten Methoden von dem Elternteil – Andrew

+1

haben es, Dank für die Hilfe – emotionlessbananas