То, что вы хотите, совершенно невозможно.
this.getClass()
будет относиться либо к объекту, представляющему ваш класс Cmd1
, либо к вашему классу Cmd2
. Однако в любом случае фактическое поле, на которое ссылается имя base
, является полем public Base base;
. И тип этого ПОЛЯ равен Base
, потому что ... ну, это прямо здесь. Это не волшебным образом меняется только потому, что этот класс подкласс. Reflection представляет класс в том виде, в каком вы его напечатали, а не какой-то конкретный экземпляр.
Как только вы говорите о конкретном c экземпляре Cmd1
или Cmd2
, которым вы являетесь, поскольку существует this
ссылка, вы можете просто разыменовать свое поле и проверить, что там на самом деле: this.base.getClass()
. Конечно, если this.base
равно нулю, это не сработает, и в этом суть: базовое поле МОЖЕТ ссылаться на любой экземпляр, тип которого равен Base
или любой его подтип, но в настоящее время он не ссылается ни на что, поэтому пути нет чтобы ответить на вопрос «каков конкретный c тип того, на что вы ссылаетесь».