2017-10-11 1 views
1

So rufen Sie Informationen über untergeordnete Klassen ab Methodeninformationen werden in der abstrakten übergeordneten Klasse abgerufen. Beispiel:So erhalten Sie die Inhaltsinformationen der untergeordneten Klasse in der abstrakten übergeordneten Klasse überschrieben

abstract Class A() 
{ 
    protected void a1() 
    { 
    //some default content 
    } 
    protected void a2() 
    { 
    //some default content 
    } 
} 

class B extends A 
{ 
    @Override 
    public void a1() 
     { 
     //overridden content 
     } 
} 
Class C extends A 
{ 
    @Override 
    public void a2() 
    { 
    //overriden content 
    } 
} 

Wie erhalten die Information, dass die Klasse C überschreibt nur a2 und Klasse B überschreibt a1

+0

Ich verstehe Ihre Frage nicht. Meinst du, wie man überprüft, ob die Methode überschrieben wurde? – user3437460

+0

Einige zusätzliche konkrete Details würden helfen, das Problem zu verstehen, das Sie haben. Im Allgemeinen sollte "A" in einem guten Entwurf immer annehmen, dass seine Unterklassen gültige Implementierungen aller seiner Methoden haben. Das ist der Punkt des Vertrages! Wenn "a1" nur für einige Unterklassen von A gilt, ist es wahrscheinlich, dass die Logik, die 'a1' verwendet, an die Unterklasse gesendet wird, die sie benötigt. –

Antwort

1

Sie können (durch refelction) zu spielen, um Sie wie folgt:

java.lang.Class class = B.class; // or any other child class 
Class dec = class.getMethod("YourMEthodNAme").getDeclaringClass(); 
System.out.println(" Declaring class: " + dec.toString()); 

// Sie können das Anme der zurückgegebenen Klasse überprüfen, wenn es A für eine bestimmte Methode ist, dann wird die Methode nicht überschrieben, wenn es der Name der untergeordneten Klasse ist, wird es überschrieben

EDIT:

Sie können dies auch in einer Schleife tun:

 Method[] m = class.getMethods(); 
     for(int i = 0; i < m.length; i++) { 

     // returns te declaring class 
     Class dec = m[i].getDeclaringClass(); 

     // displays all methods 
     System.out.println("Method = " + m[i].toString()); 
     System.out.println(" Declaring class: " + dec.toString()); 
     } 
Verwandte Themen