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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 暴风 中级黑马   /  2014-10-11 22:16  /  1467 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

this 关键字为何可以赋值给其它变量,而super则不能?

12 个回复

正序浏览
暴风 发表于 2014-10-12 23:07
是啊,就在本类中来定义一个父类类型的变量如:   父类  f = super;这种赋值编译报错!但是,: 子类  z = ...

super没有赋值这种说法
回复 使用道具 举报
暴风 中级黑马 2014-10-12 23:09:29
12#
搁浅灬石头 发表于 2014-10-11 22:27
this是本类中,super是子父类,变量只在本类作用域范围有效,super跨类就不行了。个人见解,纯属参考,java ...

是啊,就在本类中来定义一个父类类型的变量如:   父类  f = super;这种赋值编译报错!但是,: 子类  z = this;就可以。这何以解释?
回复 使用道具 举报
暴风 中级黑马 2014-10-12 23:07:42
11#
搁浅灬石头 发表于 2014-10-11 22:27
this是本类中,super是子父类,变量只在本类作用域范围有效,super跨类就不行了。个人见解,纯属参考,java ...

是啊,就在本类中来定义一个父类类型的变量如:   父类  f = super;这种赋值编译报错!但是,: 子类  z = this;就可以。这何以解释?
回复 使用道具 举报
暴风 中级黑马 2014-10-12 23:03:25
10#
刘家斌 发表于 2014-10-11 22:34
这两个都是引用,何来赋值一说?

既然都是地址,为何不能将地址复制给另一个变量?一个可以,一个不可以
回复 使用道具 举报
暴风 中级黑马 2014-10-12 23:01:17
9#
liu951753xz 发表于 2014-10-11 23:20
楼主,要回答你的问题,我想,我们得来理解this和super关键字的含义,请看我的学习笔记:

this和super关键 ...

笔记做的真好!
回复 使用道具 举报
刚看到,学习 了
回复 使用道具 举报
楼主,要回答你的问题,我想,我们得来理解this和super关键字的含义,请看我的学习笔记:

this和super关键字:
this和super分别是什么,他们各自的应用场景是什么?
this关键字:隐式参数,用于区分成员和局部变量的同名情况。
在普通方法中,this总是指向调用该方法的对象。
在构造方法中,this总是指向正要初始化的对象。
this不能用于static方法中。还可以用来调用其他的构造方法。
this代表它所在函数所属对象的引用,哪个对象在调用this所在的函数,this就代表哪个对象。
this关键字的应用。
在定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this表示这个对象,但凡本类功能内部使用到了本类对象,都用this表示。
this关键字在构造函数间调用:
this();用于构造函数间的调用。
通过this调用构造方法,必须位于第一句。

super代表父类的内存空间的标识。       
super代表父类的内存空间的标识。
当子父类出现同名成员时,可以用super进行区分
子类要调用父类构造函数时,可以使用super语句。

this:
        1.存储是当前对象的引用;
        2.它始终指向的是本对象内部的成员(成员属性、成员方法、构造函数)
super:
        1.存储的父类对象的引用;
        2.它指向父类对象中的成员(成员属性、成员方法、构造函数)
        在子类中可以定义跟父类相同的成员属性,此时,在子类中,这个变量将覆盖
        父类的同名变量。可以使用关键字super.变量名 显示的去获取父类的被覆盖的同名
        变量。

注意:如果子类的构造函数既需要this。又需要访问父类的构造函数,这种情况是不允许的。(他们都需要定义在第一行)
回复 使用道具 举报
楼主,要解答你的问题,我想,咱们得真正弄懂this 和 super的含义,请看我的学习笔记
回复 使用道具 举报
  
序号
  
  
区分点
  
  
This
  
  
Super
  
  
1
  
  
属性访问
  
  访问本类中的属性,如果本类中没有此属性,则从父类中继续查找
  
  访问父类中的属性
  
  
2
  
  
方法
  
  访问本类中的方法,如果本类中没有此方法,则从父类中继续查找
  
  直接访问父类中的方法
  
  
3
  
  
调用构造
  
  调用本类构造,必须放在构造方法的首行
  
  调用父类构造,必须放在子类构造方法的首行
  
  
4
  
  
特殊
  
  表示当前对象
  
  无此概念
  

希望楼主可以通过此对比加深理解

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 很细心。

查看全部评分

回复 使用道具 举报
super关键字和this关键字:
this:
1.存储是当前对象的引用;
2.它始终指向的是本对象内部的成员(成员属性、成员方法、构造函数)
super:
1.存储的父类对象的引用;
2.它指向父类对象中的成员(成员属性、成员方法、构造函数)
在子类中可以定义跟父类相同的成员属性,此时,在子类中,这个变量将覆盖
父类的同名变量。可以使用关键字super.变量名显示的去获取父类的被覆盖的同名
变量。
这是我的理解 看看能否对你有所帮助。有些东西在java中都是一些硬性的规定,再不能理解的时候你就记住它
回复 使用道具 举报
这两个都是引用,何来赋值一说?
回复 使用道具 举报
this是本类中,super是子父类,变量只在本类作用域范围有效,super跨类就不行了。个人见解,纯属参考,java初学者飘过。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马