class ApplicationClass   {

   AbstractWidget a;

   AbstractWidget b;

  

   // If C++ make this a virtual function

   // and use pointers to ApplicationClass obj.

 

   public AbstractWidget createWidget() {

      return new Widget();

   }

     

   public appMethod1()   {

      AbstractWidget d = createWidget();

      d.widgetMethod1();

      // . . .

      AbstractWidget e = createWidget();

      // . . .

   }

   // . . .

}

 

 

class ApplicationClassB extends ApplicationClass {

   public AbstractWidget createWidget() {

      return new WidgetB();

   }

}

 

 

 

Elsewhere …

 

ApplicationClass test = new ApplicationClassB();

test.appMethod1();