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"结构来引用派生类型的超类型).
这是预期的行为,因为在两种情况下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)
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |