Вы можете сделать это, используя отражение, то есть вы начинаете с класса, который есть у объекта, и проверяете, определяет ли этот класс метод, который идентифицируется по имени метода и типам параметров. Если класс не определяет этот метод, вы получаете его суперкласс и проверяете его, пока не нажмете Object
, в этом случае метод вообще не доступен.
Для открытых методов это проще, поскольку в Java уже есть встроенный метод для этого:
Class<?> mostSpecificImplementor =
yourObject.getClass().getMethod( "doSomthing", int.class ).getDeclaringClass();
Обратите внимание, что это работает только для открытых методов, в противном случае вам придется искать иерархию классов самостоятельно (в этом случае используйте getDeclaredMethod(...)
).