先看一段代码:
package easy;
import java.util.Date;
public class HelloB extends Date{
private void test(){
System.out.println(super.getClass().getName());
}
public static void main(String[] args) {
new HelloB().test();
}
}
输出啥呢?
输出结果为easy.HelloB
java提过了获取类名的方法:getClass().getName().开发人员可以通过这个方法来获取类名
那为啥不是Date而是HelloB呢?
主要原因java语言中任何类都继承自object类,getClass方法在Object中定义为final与native。
因而子类不能覆盖该方法,因此,this.getClass()和super.getClass()最终都是调用Object类中的getClass方法。
而Object类中的getClass方法的释义是:返回此Object类的运行类。
那如何才能在子类中得到父类中的名字呢?
可以通过java的反射机制来实现,使用getClass().getSuperclass().getName()。
看如下代码:
package easy;
import java.util.Date;
public class HelloB extends Date{
private void test(){
System.out.println(super.getClass().getSuperclass().getName());
}
public static void main(String[] args) {
new HelloB().test();
}
}
输出为:
java.util.Date