改mac无需重启源码_mac不重启切换系统

第三方分享代码
hacker 1年前 (2023-09-11) 数据库 48 4

  在Java语言中,其本身提供了获取类名的方法getClaSS().getNarne(),码农可以调用该方法来获取类名。例如,下列代码可以输出类名:

  class MaNongGu { }

  class LaoMaNong extends MaNongGu {

  public void SuperClassName(){

  System.out.println(this.getClass().getName());

  }

  }

  public class MyTest {

改mac无需重启源码_mac不重启切换系统

  public static void main(String[] args) {

  new LaoMaNong().SuperClassName();

  }

  }

  程序运行结果为:

  LaoMaNong

  由此,我们可以猜想:调用父类的getClass().getName()方法来获取父类的类名。但猜想归猜想,现实往往很残酷。为了验证我们的猜想,首先来做一个实验,源代码如下所示:

  class MaNongGu {}

  class LaoMaNong extends MaNongGu {

  public void SuperClassName(){

  System.out.println(super.getClass().getName());

  }

  }

  public class MyTest {

  public static void main(String[] args) {

  new LaoMaNong().SuperClassName();

  }

  }

  程序运行结果为:

  LaoMaNong

  为什么输出的结果不是“MaNongGu”而是“LaoMaNong”呢?聪明的你,知道原因吗?

  原因:在Java语言中,任何类都是Object类的子类,getClass()方法在Object类中被定义为final与native,子类不能覆盖该方法。因此,this.getClass()和super.getClass()最终都调用的是Object类中的getClass()方法。而Object类的getClass()方法的的功能是“返回本Object类的运行时的类”。由于上述猜想例子中,实际运行的类是LaoMaNong而不是MaNongGu,所以程序输出结果为LaoMaNong。

  那么,问题来了,怎样才能在子类中得到父类的名字呢?老码农强烈建议:请闭目思考,自己有了答案后,再往下阅读。

  方法:通过Java语言的反射机制,使用getClass()?getSuperclass().getName()。源代码如下:

  class MaNongGu {}

  class LaoMaNong extends MaNongGu {

  public void SuperClassName(){

  System.out.println(this.getClass().getSuperclass().getName());

  }

  }

改mac无需重启源码_mac不重启切换系统

  public class MyTest {

  public static void main(String[] args) {

  new LaoMaNong().SuperClassName();

  }

  }

  程序运行结果为:

  MaNongGu

  深圳远标教育ITjob培训中心,专注于C++培训,java培训,大数据培训,嵌入式培训等高端IT培训,顶级师资授课,真实项目实战,名企高薪就业。

相关推荐

网友评论

  • (*)

最新评论

  • 访客 2023-09-11 17:22:23 回复

    lass().getName()。源代码如下:  class MaNongGu {}  class LaoMaNong extends MaNongGu {  public void SuperClassName(){  System.out

    1
  • 访客 2023-09-11 09:57:34 回复

      在Java语言中,其本身提供了获取类名的方法getClaSS().getNarne(),码农可以调用该方法来获取类名。例如,下列代码可以输出类名:  class MaNongGu { }  class LaoMaNong extends MaNon

    2
  • 访客 2023-09-11 08:25:32 回复

    类中被定义为final与native,子类不能覆盖该方法。因此,this.getClass()和super.getClass()最终都调用的是Object类中的getClass()方法。而Object类的getClass()方法的的功能是“返回本Object类的运行

    3
  • 访客 2023-09-11 11:08:59 回复

    r.getClass().getName());  }  }  public class MyTest {  public static void main(String[] args) {  new LaoMaNong().SuperClassName();  }  }

    4