gpt4 book ai didi

java - 继承:有没有办法发现调用方法的类?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:38 24 4
gpt4 key购买 nike

使用这段代码:

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-equivalent”构造来引用派生类型的父类(super class)型)。

最佳答案

这是预期的行为,因为在这两种情况下,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); }
}

关于java - 继承:有没有办法发现调用方法的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24846017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com