2013-11-04 2 views
0

나는 SwingUtilities.invokeLater 내부에서 작업을 수행하는 eventOccurred 클래스를 가지고 있습니다 (EDT 상에 있어야 함). 이 수업은 연장 될 것입니다. 이 클래스를 확장하는 것이 invokeLater 내부에있는 자신의 eventOcurred 작업을 넣도록하고 싶고 강제로 수행하는 방법을 알 수 없습니다. eventOccurred를 재정의 할 수 있어야하므로 기본 클래스에 eventOccurred를 final로 설정하면 작동하지 않습니다.이상한 다형성 필요

답변

1

"doStuff()"와 같은 메소드를 기본 클래스에 구현할 수 있습니까? 그런 다음 eventOccurred 메서드는 invokeLater를 사용하여이 메서드를 호출합니다. 그런 다음 doStuff()를 재정의하고 eventOccurred를 호출하면 EDT에서 강제로 수행됩니다. 그래서 같이

:

class BaseClass { 
    public void doStuff() { 
     System.out.println("Base class do stuff"); 
    } 

    public void EventOccurred() { 
     //Put this on the EDT 
     doStuff(); 
    } 
}; 

class SubClass extends BaseClass { 
    @Override 
    public void doStuff() { 
     System.out.println("Subclass do stuff"); 
    } 
} 

하는 것은 다음 실행 :

BaseClass base = new BaseClass(); 
SubClass test = new SubClass(); 

base.EventOccurred(); 
test.EventOccurred(); 

수익률 :

Base class do stuff 
Subclass do stuff 
+0

내가 다음과 같은 아니에요. 어떤 하위 클래스에서 eventOcurred를 호출하여 doStuff를 호출하도록하려면 어떻게해야합니까? – shedhorn

+0

일부 예제 코드에서 편집했습니다. 아직도 이해가 안되면 알려주세요 – hankd

+0

좋아, 지금 다음과 같습니다. 매우 영리한. 하나 더. 이렇게하려면 모든 하위 클래스의 eventOcurrs가 super.eventOcurrs를 올바르게 호출해야합니다. 강제로 할 수 있을까요? – shedhorn