I have been searching for a while and there seems to be different approaches, here is a summary: reflections library is pretty popular if u don't mind adding the dependency. It would look like this: Reflections reflections = new Reflections("firstdeveloper.examples.reflections"); Set<Class<? extends Pet>> classes = reflections.getSubTypesOf(Pet.class); ServiceLoader (as per erickson answer) and it