使用以下代码:
class SuperTest {
SuperTest() { whoAmI(); }
void whoAmI() { System.out.println(getClass().getName()); }
}
class Test extends SuperTest {
Test() { whoAmI(); }
}
new Test()
会打印两次"Test"
。作为一个初学者,我原本期望输出结果是"SuperTest / Test"
。现在我明白了为什么这不可能实现,以及为什么隐式的this
只会引用子类型。
然而,我找不到应该如何编写whoAmI()
才能实际打印出SuperTest / Test
。
换句话说:如何让whoAmI()
访问它所“调用的”类型的名称?
编辑:我正在更改问题的标题,以便更好地描述问题。 (旧标题为:继承:是否有一种“类似于this”的结构可以从派生类型引用超类型)。
fillInStackTrace()
获取调用者边界近乎于一个黑客技巧,而且非常低效。除了调试目的外,不应该被用于其他任何目的。 - Sergey Kalinichenko