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

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

no. 이것은 많은 성찰과 일반적으로 나쁜 생각 없이는 불가능합니다. – Dallen

+1

부모에게는 하위 클래스에 대한 의존성이나 지식이 없어야합니다. 기간. –

+5

이것은 디자인이 잘못되었음을 분명히 보여줍니다. – bradimus

답변

0

리플렉션을 사용하여 디자인이나 발견을 통해 어떻게 아이에 대해 알아야합니다.

이 예제는 "패키지"또는 "공개"가 아닌 "개인"이 아닌 "a"에 종속됩니다.

public int getChildA() { 
    int a = 0; 
    if (this instanceof Child) { 
     a = ((Child)this).a; 
    } 
    return a; 
} 
0

정말로해야 할 일은 리플렉션을 사용하여 필드를 가져 와서 필드가 발견되지 않을 가능성을 확인하는 것입니다. 그러나이 여전히 미래의 디자인에서 정말 나쁜 생각,

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

출력이 10입니다 : 같은 것을보십시오. 데모 클래스도 만들어야했지만 문제없이 다시 변경할 수 있습니다.

관련 문제