获得本类的类名:this.getClass().getName()
public class Test{
public void test(){
System.out.println(this.getClass().getName());
}
public static void main(String[] args){
new Test().test();
}
}
输出结果为test
那么,super.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
此方法是不能获得父类的类名的,原因在于:java语言中任何类都继承自object类,getClass()方法在object类中被定义为final和native,子类不能覆盖该方法。因此this.getClass()和super.getClass()最终都调用的是object中的getClass()方法。而Object的getClass()方法的释义是:返回此Object的运行时类。因此上例实际运行的是Test而不是A。
要想在子类中输出父类的名字,就要用到java的反射机制(不懂请移至java的反射机制
),使用getClass().getSuperclass().getName(),代码如下:
class A{}
public class Test extends A{
public void test(){
System.out.println(this.getClass().getSuperclass().getName());
}
public static void main(String[] args){
new Test().test();
}
}
输出结果为A