Let's say I wanted to define an interface which represents a call to a remote service.
Both Services have different request and response
public interface ExecutesService<T,S> {
    public T executeFirstService(S obj);
    public T executeSecondService(S obj);
    public T executeThirdService(S obj);
    public T executeFourthService(S obj);
}
Now, let's see implementation
public class ServiceA implements ExecutesService<Response1,Request1>
{
  public Response1 executeFirstService(Request1 obj)
  {
    //This service call should not be executed by this class
    throw new UnsupportedOperationException("This method should not be called for this class");
  }
  public Response1 executeSecondService(Request1 obj)
  {
    //execute some service
  }
   public Response1 executeThirdService(Request1 obj)
  {
    //execute some service
  }
   public Response1 executeFourthService(Request1 obj)
  {
    //execute some service
  }
}
public class ServiceB implements ExecutesService<Response2,Request2>
{
 public Response1 executeFirstService(Request1 obj)
  {
    //execute some service
  }
  public Response1 executeSecondService(Request1 obj)
  {
      //This service call should not be executed by this class
    throw new UnsupportedOperationException("This method should not be called for this class");
  }
   public Response1 executeThirdService(Request1 obj)
  {
      //This service call should not be executed by this class
    throw new UnsupportedOperationException("This method should not be called for this class");
  }
   public Response1 executeFourthService(Request1 obj)
  {
    //execute some service
  }
}
In a other class depending on some value in request I am creating instance of either ServiceA or ServiceB
I have questions regarding the above:
Is the use of a generic interface ExecutesService<T,S> good in the case where you want to provide subclasses which require different Request and Response.
How can I do the above better?