Насколько я знаю, нет никакого способа узнать о ваших "дочерних классах" в Java. Не лучше ли было бы создать абстрактный метод для A, который B должен был бы реализовать, и вместо этого вызвать его?
public class A {
//other stuff here
protected void abstract mySubMethod();
//other stuff here
}
Edit:
Если я неправильно понял ваш вопрос, и вы действительно хотите знать о родительских классах, тогда да: getDeclaredFields () - это правильный рефлексивный метод для использования, как упоминалось другими авторами.
Дополнительные правки:
Я не хочу продолжать изменять этот ответ, но ...
В общем, если вы пытаетесь предоставить доступ к родительскому классу, «правильный» и «перспективный» способ сделать это - создать абстрактные методы, которые являются геттерами или сеттерами (или даже более сложными, если необходимо), а затем имеют дети уважают их или нет и отвечают соответствующим образом.
Как говорится, вы можете сделать что-то, как говорили другие:
getClass().getParentClass().getDeclaredFields()
Однако это сработало бы, только если C всегда напрямую наследуется от B. Отражения по своей природе хитры и специфичны. Я должен сделать МНОГО этого в проекте, над которым я работаю (не спрашивайте, поверьте мне, вы не хотите знать), и я избегаю этого всякий раз, когда это возможно. Если у А нет веских причин для того, чтобы требовать защищенные поля и он обнаруживает информацию о них, то вы, вероятно, захотите использовать абстрактный метод. Я бы также сказал, что вы можете решить другую проблему с помощью абстрактного метода, однако это может быть немного сложнее.