По умолчанию getDeclaredMethods()
возвращает все методы для данного класса, а также его родительские классы и интерфейсы. Однако объект Method
позволяет вам проверить, к какому классу принадлежит Method
, вызвав getDeclaringClass()
для этого Method
. Поэтому, когда вы перебираете все объекты Method
, вы можете добавить логику, чтобы печатать метод, только если он принадлежит классу B
.
Method[] m = b.getClass().getDeclaredMethods();
for (int i = 0; i < m.length; i++) {
if (m[i].getDeclaringClass().equals(B.class)) {
System.out.print(m[i].getName());
}
}
РЕДАКТИРОВАТЬ: Приведенный выше код не работает должным образом - он возвращает B
в качестве декларирующего класса всех методов. Кажется, что метод isSynthetic()
работает должным образом, возвращая true для переопределенного метода (тот, который пришел от A
), но false для метода, который пришел от B
. Поэтому следующий код может быть тем, что вы ищете.
Method[] m = b.getClass().getDeclaredMethods();
for (int i = 0; i < m.length; i++) {
if (!m[i].isSynthetic()) {
System.out.print(m[i]);
}
}