2012-07-18 4 views
0

이것은 바보 같은 질문처럼 보일지 모르지만 개체가 인스턴스화 한 개체에서 메서드를 호출 할 수 있습니까?부모 클래스에서 자식 클래스의 메서드 호출

특히 GUI를 제공하기 위해 JFrame을 확장하는 클래스 A와 다양한 구성 요소를 갖는 JPanel 유형 인 클래스 B 및 C가있는 경우 클래스 A 객체가 B와 C 사이에서 변경되어 사용자에게 다른 내용을 표시합니다. 클래스 B의 오브젝트가 클래스 A의 다른 오브젝트를 생성하지 않고 클래스 A의 메소드를 호출 할 수 있습니까?하지만 내부에 B가있는 상위 A 오브젝트를 호출 할 수 있습니까?

+0

인스턴스를 생성 할 때 A를 B로 설정할 수 있습니다. – JMelnik

+0

1. A는 B의 객체를 가지고 ... 2. A는'methodA' 메소드를 가지고 있습니다. 3. B에서'methodA'를 호출하고 싶습니까? – Mohayemin

+0

예 .. 예를 들어, 예를 들어 메뉴가있는 전체 JPanel 컨테이너가 비어있는 객체는 구성 요소가있는 JPanel 인 B 객체를 호출하고 사용자가 버튼과 같은 구성 요소와 상호 작용할 때 호출합니다. 그 B 버튼 액션 이벤트는 A의 방법을 호출하여 버튼에 따라 디스플레이를 변경합니다. 이해가된다면 ... – Ben

답변

1

내가보기에 가장 쉬운 방법은 A 인스턴스를 보유하고 있고 setter가있는 B/C의 매개 변수 또는 확장을 통해 A를 B와 C 모두에 전달하는 것입니다.

0

예를 들어 setter를 사용하거나 생성자 매개 변수로 전달하여 B 또는/및 C 객체를 만든 A 객체에 대한 참조를 배치 할 수 있습니다.

class A extends JFrame{ 
    void someMethod(){System.out.println("methods body");} 
    public static void main(String[] args) { 
     A a=new A(); 
     B b=new B(); 
     b.setCreator(a); 
     b.test(); 
    } 

} 
class B extends JPanel{ 
    private A creator; 
    public void setCreator(A creator) { 
     this.creator = creator; 
    } 

    void test(){ 
     creator.someMethod(); 
    } 
} 
+0

정말 고맙습니다. 나는 이것을 소용돌이 치고 그것이 어떻게되는지 보게 될 것이다. 건배 – Ben

0

그 스윙 프레임 워크에 getParent() 또는 getRoot() 같은 구성 요소의 계층 구조를 얻을 수 개의 다른 방법을 존재도 고려한다.

0

가장 좋은 해결책은 인스턴스 생성을 수행하는 코드가 생성/작성한 객체에 자체에 대한 참조를 전달하는 것입니다.

객체가 클래스이 (AN Exception를 생성하고 스택 트레이스를보고)를 만든 찾을하는 것이 이론적으로는 가능하지만 방법은 인스턴스를 생성 찾아 실행중인 응용 프로그램 내에서 없다 .

1

이렇게 보이는 것 같습니다.

class A { 
     private B b; 
     public void method() { 
      b = new B(this); 
     } 
    } 

    class B { 
     private A a; 
     public B(A a) { 
      this.a = a; 
     } 
     void callAMethod() { 
      a.method(); 
     } 
    } 
} 
관련 문제