В случае вы находитесь в иерархии классов и хотите знать класс, который на самом деле построен, вы можете использовать getClass(). Если вы хотите знать «самый верхний» класс вместо класса «самый нижний», перебирайте суперклассы, пока не найдете свой собственный класс.
import static java.lang.System.err;
abstract class A {
protected A() {
err.format("%s %s%n", getClass().getName(), getTopMostSubclass().getName());
}
Class<? extends A> getTopMostSubclass() {
Class<?> previousClass = getClass(), currentClass;
while (!A.class.equals(currentClass = previousClass.getSuperclass()))
previousClass = currentClass;
return (Class<? extends A>) previousClass;
}
}
class B extends A {}
class C extends B {}
public class Main {
public static void main(final String... args) {
new B(); // prints B B
new C(); // prints C B
}
}
Без StackTrace, что довольно трудно, если, конечно, вы не передать его как парам – stealthjong