"this.getClass().getSuperclass()" 的意外输出

Unexpected output of "this.getClass().getSuperclass()"

考虑以下两种情况

案例一

我有一个简单的 Java class,它有一个无参数构造函数。下面是代码

public class TestClassOne {

      public TestClassOne() {
           System.out.println("Parent class of TestClassOne is :" + this.getClass().getSuperclass());
    }
}

对象是所有 Java class 对象的超 class。因此,当我在我的主要方法中创建一个 TestClassOne 对象并 运行 它时,它给了我 desire output

Parent class of TestClassOne is :class java.lang.Object

案例二

现在我有另一个 class,命名为 TestClassTwo,它扩展了 TestClassOne。下面是代码

public class TestClassTwo extends TestClassOne {
}

现在,当我在主方法中创建 TestClassTwo 的对象并 运行 它时,TestClassOne 的无参数构造函数也被隐式调用,因为 TestClassOne 是超 class TestClassTwo 并在控制台中打印输出。我期待输出与案例 I 相同。但事实并非如此。输出是

Parent class of TestClassOne is :class org.test.TestClassOne

为什么上面的输出与案例一不一样?

谁能解释一下为什么案例 I 和案例 II 的输出不同?

您正在 this 呼叫 getClass()。输出不同,因为:

  • 在情况 1 中,this 指的是 TestClassOne 的一个实例。
  • 在情况 2 中,this 指的是 TestClassTwo 的一个实例。

简单回答:因为这是超级class.

public class TestClassOne {
    public TestClassOne() {
        System.out.println("Parent class of TestClassOne is :" + this.getClass().getSuperclass());
    }
}

这个classextends java.lang.Object(即使没有明确命名)。

所以this引用了classTestClassOne的一个对象而superclass是java.lang.Object.

public class TestClassTwo extends TestClassOne {
}

这个classextends TestClassOne.

所以this引用了classTestClassTwo的一个对象而superclass是TestClassOne.

对于 this 始终使用当前 对象 而从不使用定义它的 class。