继承:有没有办法发现一个方法被调用的类?

min*_*ins 7 java inheritance this

使用此代码:

class SuperTest {
    SuperTest() { whoAmI(); }
    void whoAmI() { System.out.println(getClass().getName()); }
}

class Test extends SuperTest {
    Test() { whoAmI(); }        
}
Run Code Online (Sandbox Code Playgroud)

new Test()会打印"Test"两次.作为初学者,我期待输出"SuperTest / Test".我现在明白为什么这是不可能的,为什么隐含this只会引用子类型.

但是我找不到whoAmI()实际打印输出的内容SuperTest / Test.换句话说:如何whoAmI()访问"从中调用"类型的名称?

编辑:我正在改变一个新问题的标题,更好地描述问题.(旧的是:继承:是否有一个"this-equivalent"结构来引用派生类型的超类型).

das*_*ght 5

这是预期的行为,因为在两种情况下getType()都会调用相同的类型对象Test.这是因为JVM知道正在创建的对象的类型是在调用Test基本构造函数时派生类的类型,因此这是要打印的类型.

这种行为对于所有编程语言都不是通用的,但它在Java中以这种方式工作.

如果一个类想要访问它自己的Class对象,它可以静态地这样做,即使用SuperTest.class表达式.

要获得所需的行为,可以将类传递给whoAmI构造函数,如下所示:

class SuperTest {
    SuperTest() { whoAmI(SuperTest.class); }
    void whoAmI(Class c) { System.out.println(c.getName()); }
}
class Test extends SuperTest {
    Test() { whoAmI(Test.class); }        
}
Run Code Online (Sandbox Code Playgroud)