2017-10-11 13 views
1

Comment obtenir des informations sur les classes substituées des classes enfant dans la classe parent abstraite. Exemple:Comment obtenir des informations de contenu substituées de la classe enfant dans la classe parente abstraite

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 
    } 
} 

Comment obtenir les informations que classe c est prépondérant que a2 et classe B est primordial a1

+0

Je ne comprends pas votre question. Voulez-vous dire comment vérifier si la méthode a été annulée? – user3437460

+0

Certains détails supplémentaires concrets aideraient à comprendre le problème que vous rencontrez. En général, dans une bonne conception, 'A' devrait toujours * supposer que ses sous-classes ont des implémentations valides de toutes ses méthodes. C'est le point du contrat! Si 'a1' n'est applicable qu'à certaines sous-classes de' A', il est probable que la logique utilisant 'a1' devrait être poussée vers la sous-classe qui en a besoin. –

Répondre

1

Vous pouvez faire à la suite de jouer (par refelction):

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

// vous pouvez vérifier l'anme de la classe retournée, si c'est A pour une méthode donnée, alors la méthode n'est pas surchargée, si c'est le nom de la classe enfant, elle est remplacée

EDIT:

Vous pouvez aussi le faire dans une boucle:

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