先看一段代码:
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