public class TestThis {
 public TestThis() {
System.out.println(super);//奇怪 这怎么会不行呢
System.out.println(this);
}
public static void main(String[] a) {
new TestThis();
}}
 //以上程序不能正常运行public class TestThis {
 public TestThis() {
System.out.println(super.toString());//奇怪 这怎么会不行呢
System.out.println(this);
}
public static void main(String[] a) {
new TestThis();
}}
//此程序能正常运行 但结果是
TestThis@de6ced
TestThis@de6ced//一样的
 
 对于这两个隐式变量
 我一直认为this是当前对象的引用 super是 父类对象的引用  但从结果来看  和我所想的不一样

解决方案 »

  1.   

    this是代表当前对象,而super是用来对父类中的方法或者成员进行引用的一个关键字,并不代表对象,如果这样理解的话,你new的时候不就创建了好多对象了?对于toString()方法,这里调用的都是从Object继承来的toString(),结果相同是自然的。
      

  2.   

    System.out.println(super.toString());//奇怪 这怎么会不行呢 
    =============
    这倒底行还是不行???
      

  3.   


    public class Main {    public Main() {
            System.out.println(super.toString());
            System.out.println(this);
        }    @Override
        public String toString() {
            return "Hello World";
        }    public static void main(String[] a) {
            new Main();
        }
    }
      

  4.   

    super()?
    继承用的
    toString()是可以理解成main的内置类(这样说不正确,暂时这样理解吧)
    如果想改变main 输出对象,可以重写toString()public String toString()
    {
       return "aa";
    }main 执行自动调用
      

  5.   

    关于this和super的区别我觉得
    相同点:
    this.XXX
    super.XXX
    XXX为属性或方法
    不同点:
    super(XXX)或super()调用父类有参或无参数的构造方法。即使在子类中没写super()
    java也会默认执行super()调用父类的构造方法。所以我觉得在产生子类对象的同时
    也产生了父类的对象而且父类对象的地址与子类是相同的也就是说父类对象确实存在
    而子类对象是在父类对象的基础上产生的一个新对象你可以把子类和父类分别写在两个.java文件中,分别在构造方法中写上System.out.println(this)
    你会发现在产生子类对象的时候,也会调用父类构造方法,说明产生了父类对象,而地址也是相同的。但你在父类中单独写个main方法产生父类对象,得到的地址就是不同的了。