document.write('
不存在问题,输出结果为package1.Test。
[解析] Java语言提供了获取类名的方法:getClass().getName(),开发人员可以调用这个方法来获取类名。那么通过调用父类
的getClass().getName()方法来获取父类的类名是可行的吗?为了解答这个问题,首先来做一个实验。给出下面的程序:
class A{}
public class Test extends A
{
public void test()
{
System.out.println(super.getClass().getName());
}
public static void main(String[] args)
{
new Test().test();
}
}
程序的运行结果为:
Test
为什么输出的结果不是“A”而是“Test”呢?主要原因在于Java语言中任何类都继承自Object类,getClass()方法在Object类
中被定义为final与native,而子类不能覆盖该方法。因此,this.getClass()和super.getClass()最终都调用的是Object类中的
getClass()方法。而Object类中的getClass()方法的释义是:返回此Object的运行时类。由于在上面代码中实际运行的类是Test
而不是A,因此,程序输出结果为Test。那么如何才能在子类中得到父类的名字呢?可以通过Java的反射机制,使用
getClass().getSuperclass().getName()。代码如下所示:
class A{}
public class Test extendsA
{
public void test()
{
System.out.println(this.getClass().getSuperclass().getName());
}
public static void main(String[] args)
{
new Test().test();
}
}
程序的运行结果为:
A
对于本题而言,调用super.getClass().getName()也会得到当前运行类的名字,即package1.Test。
');