直接看代码的打印输出:
/** * Created by TK on 2016/9/24. */ public class Son extends Father { public void getSuperClass(){ System.out.println(this.getClass().getSuperclass().getName()); } public void getSuperClass2(){ System.out.println(super.getClass().getName()); } }
/** * Created by zhuyuqing on 16/8/11. */ public class Main { public static boolean flag; public static final AtomicLong nextSeriaNum = new AtomicLong(); public static void main(String[] args) throws InterruptedException { Son son = new Son(); son.getSuperClass(); son.getSuperClass2();
}
}
输出结果为:test.Father
test.Son
或许这个输出可能出乎部分人的意料,但事实确实如此。
原因如下:
Object的getClass()方法的释义是:返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
/**
* Returns the runtime class of this {@code Object}. The returned
* {@code Class} object is the object that is locked by {@code
* static synchronized} methods of the represented class.
**/
释义指出,要返回此Object运行时类,这外当然不可能指Object自己了,否则所有类调用getClass()方法都返回Object.class了。
所以,this.getClass().getName()与super.getClass.getName()返回的都是当前运行的类名,即例子中的test.Son。
要想返回父类名应使用this.getClass().getSuperClass().getName()