Java面试笔试-023-获取父类的类名

微信公众号:JavaWeb架构师

描述

  • Java语言提供了获取父类名的方法:getClass().getName(),例子如下:
public class Test {
    public void test() {
        System.out.println(getClass().getName());
    }
    
    public static void main(String[] args) {
        new Test().test();
    }
}

结果是:

Test
  • 那么,是否可以通过super.getClass().getName()来获取父类名呢?下面实验一下:
public class Test {
    public void test() {
        System.out.println(super.getClass().getName());
    }
    
    public static void main(String[] args) {
        new Test().test();
    }
}

class A {
    
}

结果是:

Test
  • 为什么会这样呢?主要原因在于Java语言中任何类都继承了Object类,getClass()方法在Object类中被定义为final与native,子类不能覆盖该方法。因此this.getClass()和super.getClass()最终都调用的是Object中的getClass()方法。而Object的getClass()方法的释义是:返回此Object的运行时类。由于在例2中实际运行的类是Test而不是A,因此程序输出结果为Test。那么如何才能在子类中得到父类的名字呢?可以通过Java的反射机制,使用getClass().getSuperClass().getName(),代码如下所示:
public class Test extends A{
    public void test() {
        System.out.println(getClass().getSuperclass().getName());
    }
    
    public static void main(String[] args) {
        new Test().test();
    }
}

class A {
    
}

结果为:

A


其它

源码下载:

关注下方微信公众号,
回复:
JavaMB.code
  • 欢迎加入交流群:451826376

  • 更多信息:www.itcourse.top

完整教程PDF版本下载

你可能感兴趣的:(Java面试笔试-023-获取父类的类名)