class A { public String name = "01"; } class B extends A { public String name = "02"; public void testM() { //System.out.println(this.name + "," + super.name); System.out.println(this.getClass().getSimpleName() + "\n" + super.getClass().getSimpleName()); } } class ThisSuper { public static void main(String[] args) { B b = new B(); b.testM(); } }
输出结果:
B B
super既然指向子类的父类引用,为什么程序打印出子类呢?
不管是this.getClass()还是super.getClass(),最终都指向了Object对象的getClass(),这个方法是final的不能被子类重写。根据API定义,getClass()返回对象在运行时的类型,运行时的类型是B,所以返回类型也是B。
this指当前类 是锁定了其他对象的 而且你这里是找的类名的嘛 你想找里面的常量是不 你找name就不一样了 少年
getClass
public final Class<? extends Object> getClass()
返回一个对象的运行时类。该 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
返回:
表示该对象的运行时类的 java.lang.Class 对象。此结果属于类型 Class<? extends X>,其中 X 表示清除表达式中的静态类型,该表达式调用 getClass。
那意思就是获取到的是正在运行时的类文件名。此时运行的只有B类!