java里super指向的是父类的实例,this指向的是当前的实例对象。public class Test extends Date {
public static void main(String[] args) {
new Test().test();
}
public void test(){
System.out.println(super.getClass().getName());
// System.out.println(getClass().getSuperclass().getName());
}
}我上面的程序打印出来的结果为什么是cn.com.Test.Test,而不是父类的名字。我知道Object中getClass()方法是final的。也就是不能继承重写的。可是出来的结果为什么是当前类的类名求解。

解决方案 »

  1.   

    super表示的是从子类调用父类中的指定操作:比如:调用属性、方法、构造等,
    this、和super的区别是:
                    this                    super
    属性访问:  调用本类中的属性,如果本       访问父类中的属性
             类中没有此属性则在父类中继续
             查找。
    方法:      访问本类中的方法,如果本类     直接访问父类中的方法
             中没有此方法,则在父类中继续查找调用构造: 调用本类构造方法,必须放在构造   调用父类构造、必须放在子类构造方法的首行
             方法首行特殊:      表示当前对象                    无此概念
      

  2.   

    调用父类,this 当前对象~
      

  3.   

    super调用的是父类的方法,属性等。
    this是本类的属性,方法等。
    就这样
      

  4.   

    http://blog.csdn.net/tts_kevin/article/details/6717108
      

  5.   

    在网上看到有人这样说,super表示在子类中调用父类的方法或属性而已,楼主可以试一下这个输出:
    public   void   test(){ 
    System.out.println(this.getClass());
    System.out.println(super.getClass());

    输出的结果都是当前实体类Test
      System.out.println(super.getClass());调用父类Date类中的getclass()方法,Date类Object的子类,Date中的getClass()是Object中的,运行时期的实例是Test类,所以输出的依然是Class Test
      System.out.println(this.getClass()); //调用Test类中的getclass()方法,此方法从Date继承的,Date从Object继承的,运行时期的实例是Test类,所以输出的是Class Test
      

  6.   

    this.getClass(),super.getClass()方法输出是当前的类Test.就你所说的,是多态的解析。可是多态是要方法重写。Object中getClass()是final的。是不允许重写的。就是这两方法调用的都是Object中的getClass()方法。你这解析还是解析不了为什么super.getClass()输出的是当前类
      

  7.   

    this:属性表示的是本类中的属性,如果在子类中找不到熟悉则会从父类中继续查找;this.方法名()表示调用本类中的方法,如果找不到则在父类中查找;可以调用本类中的其他构造方法,但是要求至少有一个构造方法是没有this(),作为调用的出,放在调用构造时的首行;this表示当前对象。super:表示直接找到父类中的属性;从子类直接找到父类中被子类覆写过的方法;从子类调用父类的构造方法,子类不管如何编写代码,则肯定要先调用父类的构造;调用构造时,要放在子类构造方法首行。
      

  8.   

    super.getClass().getName()调用的是父类Date类中的getClass().getName()方法,你在Test类中没重写过getClass(),所以加不加super在这里执行效果都一样,都是找父类。你执行这条语句的对象是Test类型的,也就是一个Test实例在getClass(),当然结果是Test。只有父类对象执行getClass().getName()才是得到父类的类型,或者getClass()是static的可以Date.getClass().getName()
      

  9.   

    super是调用父类成员,this调用子类成员。。
      

  10.   

    结果是这个,我现在想弄明白为什么super.getClass().getName()得出来的是当前类的名字。而不是父类的名字。最好有人能解析出运行时super在VM中的状态是怎样的?
      

  11.   

    在Object类源代码里,getClass()是final native的
    public final native Class<?> getClass();也就是说,所有类的getClass()都是一样的,返回值是调用getClass()方法对象实例的类型。具体实现代码不是java的,不知道sun给藏哪儿了。
      

  12.   

    this表示当前对象,也就是当前类对象,super表示当前类的父类。
    举例:你定义一个新的类:A,这个A继承了类B,也就是说B是A的父类。那么如果A中 有个方法:aa();B中也有个方法: aa();那么在A 中用this.aa()调用的就是A中定义的方法,而super.aa()调用的就是A的父类B中定义的方法aa();
      

  13.   

    this 
    使用this关键字引用成员变量。 
    使用this关键字在自身构造方法内部引用其他构造方法。 
    使用this关键字代表自身类的对象。 
    使用this关键字引用成员方法 super 
    在子类的构造方法内部引用父类的构造方法。 
    在子类中调用父类中的成员方法。 
    在子类中调用父类中的成员变量。 
      

  14.   

    public   class   Test   extends   Date   { 
    public   static   void   main(String[]   args)   { 
    new   Test().test(); 
    } 你子类的方法把父类的方法重写了,当然调用的是子类的方法、。
      

  15.   

    从效果来看,getClass()返回的就是调用类的类型啊,你用Test类对象执行返回的就是Test类getClass()又不是static的,只能在对象实体里调用,不管你super到哪层,就是super到了Object也是这个对象在调用
      

  16.   

    我知道运行结果是这样,Api里也是这么说的。可是为什么是这样呢?能详细解析下嘛。VM中执行过程是怎样的?