2016-07-30 6 views
-4
class Parent 
{ //need to access variable of child class 
} 

class Child extends Parent 
{ int a=10; 
} 
+3

nein. Dies ist ohne viel Nachdenken und generell keine schlechte Idee möglich. – Dallen

+1

Der Elternteil sollte niemals eine Abhängigkeit oder gar Kenntnis von Kindklassen haben. Zeitraum. –

+5

Dies ist ein deutlicher Hinweis darauf, dass Ihr Design falsch ist. – bradimus

Antwort

0

Sie müssten etwas über das Kind wissen - entweder durch Design oder Entdeckung durch Reflexion.

Dieses Beispiel hängt davon ab, ob "a" "Paket" oder "öffentlich" und nicht "privat" ist.

0

Wenn Sie wirklich müssen, was Sie tun müssen, ist versuchen, das Feld mit Reflexion zu bekommen und die Möglichkeit zu finden, dass das Feld nicht gefunden wird. Versuchen Sie so etwas wie:

static class Parent 
{ 
    public int getChildA(){ 
     try { 
      Class clazz = Child.class; 
      Field f = clazz.getDeclaredField("a"); 
      if(!f.isAccessible()) 
       f.setAccessible(true); 
      return f.getInt(this); 
     } catch (NoSuchFieldException ex) { 
      //the parent is not an instance of the child 
     } catch (SecurityException | IllegalArgumentException | IllegalAccessException ex) { 
      Logger.getLogger(SOtests.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     return -1; 
    } 
} 

static class Child extends Parent 
{ 
    int a=10; 
} 

public static void main(String[] args) { 
    Child c = new Child(); 
    Parent p = (Parent) c; 
    System.out.println(p.getChildA()); 
} 

die Ausgabe 10, aber dies noch von einem Design-Interessenten eine wirklich schlechte Idee ist. Ich musste auch die Klassen für die Demo machen, aber Sie können sie ohne Probleme zurück ändern.

Verwandte Themen