2010-10-11 8 views
0

Existe-t-il un moyen en Java pour obtenir une instance de la classe parent de mon objet à partir de cet objet?Comment obtenir une instance du parent de mon objet?

ex.

public class Foo extends Bar { 

    public Bar getBar(){ 
      // code to return an instance of Bar whose members have the same state as Foo's 
    } 

} 
+1

tu ne pourrais pas retourner ce ';'? –

+0

-1 pour ne pas être clair. En outre, si l'intention était simplement de «renvoyer ceci», vous n'auriez pas besoin d'une fonction pour cela. –

+0

@Erick Robertson: vous n'avez pas pris la peine de lire le code et le commentaire de la méthode. – stevebot

Répondre

4

Il n'existe pas de méthode intégrée pour ce faire. Vous pouvez certainement écrire une méthode qui prendra un Foo et créer une barre qui a été initialisée avec les propriétés appropriées.

public Bar getBar() { 
     Bar bar = new Bar(); 
     bar.setPropOne(this.getPropOne()); 
     bar.setPropTwo(this.getPropTwo()); 
     return bar; 
    } 

D'autre part, ce qui signifie l'héritage est qu'un Foo est juste Bar, vous pouvez donc faire

public Bar getBar() { 
     return this; 
    } 
+0

lemme faites un essai – stevebot

+1

Oui, tout ce que vous avez à faire est d'écrire la méthode comme vous voulez qu'elle fonctionne. Si vous vouliez juste le 'renvoyer ceci ', alors vous devriez juste faire' Bar bar = foo; 'Vous n'avez pas besoin d'une méthode pour le faire. –

+0

Il n'est pas déraisonnable d'avoir une méthode qui "convertit" un Foo en une barre dans le cadre d'une API, par exemple si vous voulez que certains clients utilisent votre Foo uniquement comme s'il s'agissait d'une barre. –

0

Longue histoire courte:

return this; 

Si vous voulez retourner une copie, puis créez un constructeur de copie sur Bar qui reçoit une autre barre.

public Bar(Bar that) { 
    this.a = that.a; 
    this.b = that.b; 
    ... 
} 
0

Ceci est une instance de barre, la chose simple est juste "return this;" mais si vous avez besoin d'un objet distinct, vous pourriez peut-être implémenter java.lang.Clonable et "return this.clone();"

0

Si votre classe étend Bar, il s'agit d'une instance de Bar elle-même. Donc

public Bar getBar() { 
    return (Bar) this; 
} 

devrait le faire. Si vous voulez un "autre instance", vous pouvez essayer:

public Bar getBar() { 
    return (Bar) this.clone(); 
} 
0

Depuis Foo est-un bar, vous pouvez le faire:

return this; 

Ceci ne retourne l'instance mère objet actuel.

0

Vous pouvez utiliser la réflexion

package com; 

    class Bar { 

     public void whoAreYou(){ 
      System.out.println("I'm Bar"); 
     } 

    } 

    public class Foo extends Bar{ 

     public void whoAreYou() { 
      System.out.println("I'm Foo"); 
     } 

     public Bar getBar() { 
      try { 
       return (Bar)this.getClass().getSuperclass().newInstance(); 
      } catch (InstantiationException e) { 
       e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
       e.printStackTrace(); 
      } 
      throw new RuntimeException(); 
     } 

     public static void main() { 
      Foo foo = new Foo(); 
      foo.whoAreYou(); 
      foo.getBar().whoAreYou(); 
     } 
    } 
Questions connexes