super.getClass(),this.getClass(),this.getSuper

import java.util.Date;
public  class Test {
public static void main(String[] args) {
new Test().test();
}

public void test(){
System.out.println(super.getClass().getName());
System.out.println(this.getClass().getSuperclass().getName());
System.out.println(super.getClass().getSuperclass().getName());
System.out.println(this.getClass().getName());
  }
}

结果:

 

 Test
java.lang.Object
java.lang.Object
Test

getClass
public final Class<? extends Object> getClass()返回一个对象的运行时类。该 Class 对象是由所表示类的 static synchronized 方法锁定的对象。

返回:
表示该对象的运行时类的 java.lang.Class 对象。此结果属于类型 Class<? extends X>,其中 X 表示清除表达式中的静态类型,该表达式调用 getClass。

getName
public String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

很奇怪,结果是Test
在test方法中,直接调用getClass().getName()方法,返回的是Test类名
由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在
test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()
方法, 等效于调用super.getClass().getName() 方法, 所以,super.getClass().getName()方法返回的也应该是Test。
如果想得到父类的名称,应该用如下代码:
getClass().getSuperClass().getName();

 

getClass()的这个方法是在Object类中的在Java中有这样一个类,它是所有类的祖先,任何类都是其子孙类,它就是java.lang.Object,如果一个类没有显式地指明其父类,那么它的父类就是Object。如同我们称自己为炎黄子孙一样,所有的类都可以称为Object子孙,^_^。在java中除了基本型别(数字、字符、布尔值,primitive type)不是对象之外,其它的均为对象(class type)。

 

总结:getClass()类是Object类中的方法而且是final方法,是不能被子类实现的,而getClass()方法返回的是当前正在运行类,所以无论我们调用this.class还是super.class得到的结果都是一样返回当前类。

你可能感兴趣的:(java)