I apologize if this has been answered before but either i don't know the correct verbiage or my google fu is bad.
I have a TestModel class which has the getters and setters for all the tests I use. Then I have a AdditionalTestModel class that extends the TestModel with additional getters and setters for that specific type of tests.
Now I have BuildTest Class that i want to be able to pass TestModel and any extended classes of TestModel.
public static Class<?> buildTest(Class<?> test, Class<?> template)
    throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    Class<?> testClass = test.getClass();
    Method[] testMethods = testClass.getMethods();
    for (Method method : testMethods) {
        String name = method.getName();
        if (name.startsWith("get")) {
            String testMethodType = method.getReturnType().getTypeName();
           // additional code removed//
        }
    } 
If instead of Class<?> i was using TestModel it would work for any test that i pass of Class type TestModel. But i want to be able to pass the extended class to this method as well without having to write a method for each extended class. Any recommendations? Adding information on the models in case it matters.
public class TestModel {
private String testDescription;
private String testName;
private String apiPath;
private String method;
private String expectedTest;
private Map<String, String> header = new HashMap<>();
private Object body;
private String expectedResult;
private String testCaseId;
private String testUUID;
private List testTypes;
public String getTestDescription() {
    return testDescription;
}
public void setTestDescription(String testDescription) {
    this.testDescription = testDescription;
}
public String getTestName() {
    return testName;
}
public void setTestName(String testName) {
    this.testName = testName;
}
public String getAPIPath() {
    return apiPath;
}
public void setAPIPath(String apiPath) {
    this.apiPath = apiPath;
}
public String getExpectedTest() {
    return expectedTest;
}
public void setExpectedTest(String testName) {
    this.expectedTest = testName;
}
public String getMethod() {
    return method;
}
public void setMethod(String method) {
    this.method = method;
}
public Map<String, String> getHeader() {
    return header;
}
public void setHeader(Map<String, String> header) {
    this.header = header;
}
public Object getBody() {
    return body;
}
public void setBody(Object body) {
    this.body = body;
}
public String getExpectedResult() {
    return expectedResult;
}
public void setExpectedResult(String expectedResult) {
    this.expectedResult = expectedResult;
}
public String getTestCaseId() {
    return testCaseId;
}
public void setTestCaseId(String testCaseId) {
    this.testCaseId = testCaseId;
}
public String getTestUUID() {
    return testUUID;
}
public void setTestUUID(String testUUID) {
    this.testUUID = testUUID;
}
public List getTestTypes() {
    return testTypes;
}
public void setTestTypes(List testTypes) {
    this.testTypes = testTypes;
}
}
public class AdditionalTestModel extends TestModel {
@Override public Object getBody() {
    return super.getBody();
}
}
Edit: per a request adding the call information here:
   @Test(dataProvider = "Default", threadPoolSize = THREADS, timeOut = API_TIME_OUT)
        @Description("")
        public void sampleTest(AdditionalTestModel testFromDataProvider) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        testSetup(testFromDataProvider);
        AdditionalTestModel test = BuildTest.buildTest(testFromDataProvider, template);
        Response response = RestAPI.call(test, testEnvironment);
        if (null != response) {
            ValidateAPIResponse.validateTestModel(test, response);
        } else {
            Assert.fail("Response is null, probably a bad method.");
        }
    }
Where testFromDataProvider is passed from a TestNg data provider.
Now LppEdd below already pointed out i could only assign the base class using generics so working on trying it his way, just have not gotten a chance to change things up yet.
Edit: Also realize now my question was bad. Thanks LppEdd. I should have asked How can I get a method to accept an instance of a class and an instance of any extended class
 
     
     
    