在Java语言中,其本身提供了获取类名的方法getClaSS().getNarne(),码农可以调用该方法来获取类名。例如,下列代码可以输出类名:
class MaNongGu { }
class LaoMaNong extends MaNongGu {
public void SuperClassName(){
System.out.println(this.getClass().getName());
}
}
public class MyTest {
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());
}
}
public class MyTest {
public static void main(String[] args) {
new LaoMaNong().SuperClassName();
}
}
程序运行结果为:
MaNongGu
深圳远标教育ITjob培训中心,专注于C++培训,java培训,大数据培训,嵌入式培训等高端IT培训,顶级师资授课,真实项目实战,名企高薪就业。
网友评论
最新评论
lass().getName()。源代码如下: class MaNongGu {} class LaoMaNong extends MaNongGu { public void SuperClassName(){ System.out
在Java语言中,其本身提供了获取类名的方法getClaSS().getNarne(),码农可以调用该方法来获取类名。例如,下列代码可以输出类名: class MaNongGu { } class LaoMaNong extends MaNon
类中被定义为final与native,子类不能覆盖该方法。因此,this.getClass()和super.getClass()最终都调用的是Object类中的getClass()方法。而Object类的getClass()方法的的功能是“返回本Object类的运行
r.getClass().getName()); } } public class MyTest { public static void main(String[] args) { new LaoMaNong().SuperClassName(); } }