"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。
考虑以下两种情况
案例一
我有一个简单的 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。