考虑以下两种情况
我有一个简单的Java类,它有一个无参数的构造函数。以下是代码
public class TestClassOne {
public TestClassOne() {
System.out.println("Parent class of TestClassOne is :" + this.getClass().getSuperclass());
}
}
Object是所有Java类的超类。因此,当我在main方法中创建一个TestClassOne对象并运行它时,它给了我欲望输出,这是
Parent class of TestClassOne is :class java.lang.Object
现在我有另一个名为TestClassTwo的类,它扩展了TestClassOne。以下是代码
public class TestClassTwo extends TestClassOne {
}
现在,当我在main方法中创建TestClassTwo的对象并运行它时, TestClassOne的无参数构造函数也被隐式调用,因为TestClassOne是TestClassTwo的超类并在控制台中打印输出。我期待输出与情况I相同。但事实并非如此。输出是
Parent class of TestClassOne is :class org.test.TestClassOne
为什么以上输出与Case I相同?
有人可以解释一下为什么案例I和案例II中的输出有所不同吗?
答案 0 :(得分:1)
您在getClass()
上致电this
。输出不同,因为:
this
指的是TestClassOne
。this
指的是TestClassTwo
。答案 1 :(得分:0)
简单回答:因为这是超类。
public class TestClassOne {
public TestClassOne() {
System.out.println("Parent class of TestClassOne is :" + this.getClass().getSuperclass());
}
}
此类extends java.lang.Object
(即使未明确命名)。
所以this
引用类TestClassOne
的对象,超类是java.lang.Object
。
public class TestClassTwo extends TestClassOne {
}
此课程extends TestClassOne
。
所以this
引用类TestClassTwo
的对象,超类是TestClassOne
。
对于this
,始终使用当前的对象,而不是使用它的类。