由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在test方法中调用super.getClass().getName()方法等效于调用getClass().getName()方法,都是在调用从父类继承的 getClass()方法,所以super.getClass().getName()方法返回的也应该是Test。
如果想得到父类的名称,应该用如下代码:
getClass().getSuperClass().getName();
super不是超类的引用,而是表示在子类中调用父类的方法或属性而已- class B extends A {
- public void print() {
- System.out.println(super.getClass());//调用A类中的getclass()方法,A是Object的子类,A中的getClass()是Object中的,运行时期的实例是B类,所以输出的依然是Class B
- System.out.println(this.getClass()); //调用B类中的getclass()方法,此方法从A继承的,A从Object继承的,运行时期的实例是B类,所以输出的是Class B
- }
复制代码 |