奇葩的笔试题,都来试试!

本文介绍了Java面试中的一道笔试题,涉及super、getClass()和getName()知识点。通过代码分析,揭示了this.getClass和super.getClass实际上都调用Object类的final native方法,导致运行结果出乎意料。这道题目提醒读者深入理解Java语言细节,提升面试竞争力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇是1000期面试系列文章的第118期,持续更新中.....

 回复“面试”获取优质面试资源!

面试专栏

面试专栏

精选1000 期 java相关面试题,以及技术知识点,帮助你提升技术、收割offer!

16篇原创内容

公众号

上一期中,笔试题,可能有人会觉得挺简单的,今天的你可否敢再试试,哈哈哈。这道题看起来也很简单。

图片

请看题目

下面这段代码是否能运行?运行结果是什么?

package com.jiang;
/**
 *
 * @author 面试专栏
 * @date 2021/7/11 15:52
 */
class Test {
}
public class Test2 extends Test {

    public void test1() {
        System.out.print(super.getClass().getName());
    }

    public void test2() {
        System.out.print(this.getClass().getName());
    }

    public static void main(String[] args) {
        Test2 test2 = new Test2();
        test2.test1();
        test2.test2();
    }
}

这个题目很多朋友给出的答案,大概有三种:

  • 第一种:com.jiang.Testcom.jiang.Test2

  • 第二种:java.lang.Objectcom.jiang.Test2

  • 第三种:com.tian.Test2com.tian.Test2

你觉得是哪一种呢?还是都错了?

分析

知识点

考察super、getClass()、getName()。

在我们的Java语言中,提供了获取类名的方法:getClass().getName(),我们可以通过这种方式获取类名。那么通过调用父类的getClass().getName()方法就可以获取父类的类名了吗?

为了解释这个问题,我们不妨可以来试试下面这段代码:

package com.jiang;
class A {

}
public class B extends Test {

    public void test1() {
        System.out.println(super.getClass().getName());
    }
    public static void main(String[] args) {
        B b = new B();
        b.test();
    }
}

运行结果:com.jiang.B

为什么输出的结果是B不是A呢?

主要原因在于Java语言中,任何类都隐形的继承于Object类,这里的getClass()方法在Object中被final与native修饰。

图片

而子类不能覆盖此方法。因此,this.getClass和super.getClass最终调用的都是Object中的getClass()方法。而Object类中的getClass()方法的解释为:

Returns the runtime class of this {@code Object}.

返回此Object的运行时类。由于在上面代码中,实际运行的类是B而不是A,因此,文章开头的代码运行结果为:com.tian.Test2com.tian.Test2

后记

这道题目,看似简单,但却很多人确实不知道,也没接触过这个点。

图片

加油,每一道题目都有可能是你往后谈薪资的资本!

最后,记得帮忙点个赞哦!

推荐阅读

常见的SQL面试题:经典50例

面试官:分布式事务解决方案(附代码)

合奥科技网络 面试(含参考答案)

20张图详解Git

112期汇总,建议收藏

饿了么笔试题,看似简单,难倒一批人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值