谈谈我对super和this的理解
2010-09-24 23:52
281 查看
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
---------------------
而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的简单理解
- 关于java this和super的简单理解
- Java入门学习-理解super,this,@override的用法
- Web前端面试指导(三十一):谈谈你对this的理解
- 有关super,this,以及含有参数的简单理解
- Java中 this 和 super 关键字理解
- this和super代码理解.
- 你真的理解Java的this和super吗?
- 你真的理解Java的this和super吗?
- 无聊:正确的理解this 和 super
- java this和super理解
- parent,son深刻理解this,super关键字
- 正确的理解this 和 super
- 你不理解的Super与This
- 本人对this super static 关键字的理解
- 正确的理解this 和 super
- 谈谈你对this的理解
- HTML5前端之谈谈我对this的理解
- 一种角度理解private,this,super关键字和Class类
- java this,super简单理解