Единственный способ, которым я знаю, это следующее: создать защищенный конструктор, который принимает String в родительском классе.
class Parent {
private final String className;
protected Parent(String className) {
this.className = className;
}
}
public class Child extends Parent {
public Child() {
super("Child");
}
}
Кстати, вы можете даже улучшить это, используя new Throwable().getStackTrace()
в custructor paren.В этом случае вам даже не нужно заставлять всех детей передавать свое имя родителю.
class Parent {
private final String className;
protected Parent() {
StackTraceElement[] trace = new Throwable().getStackTrace();
this.className = trace[1].getClassName();
}
}