A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李建强 中级黑马   /  2012-9-24 19:35  /  1238 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李建强 于 2012-9-24 19:45 编辑
  1. class TestFu
  2. {
  3. public void show()
  4. {
  5. System.out.println("我是Test的父类!");
  6. }
  7. }

  8. public class Test extends TestFu
  9. {
  10. public void show()
  11. {
  12. System.out.println("我就是传说中的Test了。");
  13. }
  14. public void callOverridedMethod()
  15. {
  16. Object obj = this;
  17. System.out.println(obj.toString());//this是引用。
  18. super.show();//这一句正常
  19. //super不是引用。如果super是引用的话,那么为什么不可以把引用传给obj1?
  20. //下面这句不能编译。
  21. Object obj1 = super;
  22. }


  23. public static void main(String[] args)
  24. {
  25. Test t=new Test();
  26. t.show();
  27. t.callOverridedMethod();
  28. }

  29. }
复制代码
对于super,
《The Java Programming Language》上这样说:
In field access and method invocation, super acts as a reference to the current object as an instance of its superclass.
这里面super acts as a reference ,说super 只是acts as,但不是reference。如果不是引用是什么?

对于this.
JLS上这样说:
When used as a primary expression,
the keyword this denotes a value that is a reference to the object for which the instance method was invoked (§15.12),
or to the object being constructed.
这里说this is a reference。说this是一个reference。

这样理解可对?
还有,怎么使用它们就不要说了。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

2 个回复

倒序浏览
super在语法层次,看上去就像父类对象的指针,但是事实却不是,在构造函数第一句的super指的是一个父类的构造方法,即使你不加super,那么虚拟机会自动添加super()在任何构造方法的第一句,也就是说父类构造方法一定会被执行。而普通方法中的super.xxx中的super也不是父类的对象,而是一个引用父类类型的一个指针,其实无论super还是this,把它理解为指向对象其实是并不太合适的。更好的理解应该是指向当前类型,因为无论怎么样,对象只有一个。
super是编译才有用的,是用来指导编译器的。
这里说明this是引用,而super不是

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
这个问题我这几天正好也在研究 刚好帮你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马