1、super不是父类的引用(System.out.println(super)会报错),但是用他可以调用父类的方法和属性;
而this是指当前对象的引用;(注意:他们都是针对对象的,如果该对象不存在,则不能使用)。
2、在子类中调用super.XXX(),和this.XXX()方法,其中如果XXX()方法是继承自Object类中的方法,则此时的super就等于this的效果即super可以用this取代。看下面的例子:
父类Extends
package cn.lx.test;
public class Extends {
}
子类ExtendsClass
package cn.lx.test;
public class ExtendsClass extends Extends{
public static void main(String[] args) {
ExtendsClass ec = new ExtendsClass();
ec.dos();
}
@Override
public void dos() {
// TODO Auto-generated method stub
// super.dos();
System.out.println("---------------------");
System.out.println(super.toString()==this.toString());
System.out.println(this.toString()==this.toString());//看Object的toString()源码
System.out.println(super.toString().equals(this.toString()));
System.out.println(super.equals(this));
System.out.println(super.getClass()==this.getClass());
System.out.println(super.getClass());
System.out.println(this.getClass().getSuperclass());
System.out.println(super.hashCode()==this.hashCode());
System.out.println(super.toString());
System.out.println(Integer.toHexString(super.hashCode()));
System.out.println("---------------------");
}
}
运行结果是
---------------------
false
false
true
true
true
class cn.lx.test.ExtendsClass
class cn.lx.test.Extends
true
cn.lx.test.ExtendsClass@c17164
c17164
---------------------
本文通过一个具体的Java示例对比了super和this在子类方法中的使用区别,特别是当调用的方法来自Object基类时,两者的表现及等效性。
677

被折叠的 条评论
为什么被折叠?



