黑马程序员技术交流社区

标题: this 和 super关键字 [打印本页]

作者: 暴风    时间: 2014-10-11 22:16
标题: this 和 super关键字
this 关键字为何可以赋值给其它变量,而super则不能?
作者: 搁浅灬石头    时间: 2014-10-11 22:27
this是本类中,super是子父类,变量只在本类作用域范围有效,super跨类就不行了。个人见解,纯属参考,java初学者飘过。
作者: 刘家斌    时间: 2014-10-11 22:34
这两个都是引用,何来赋值一说?
作者: 小小程序员    时间: 2014-10-11 22:48
super关键字和this关键字:
this:
1.存储是当前对象的引用;
2.它始终指向的是本对象内部的成员(成员属性、成员方法、构造函数)
super:
1.存储的父类对象的引用;
2.它指向父类对象中的成员(成员属性、成员方法、构造函数)
在子类中可以定义跟父类相同的成员属性,此时,在子类中,这个变量将覆盖
父类的同名变量。可以使用关键字super.变量名显示的去获取父类的被覆盖的同名
变量。
这是我的理解 看看能否对你有所帮助。有些东西在java中都是一些硬性的规定,再不能理解的时候你就记住它
作者: 千里马    时间: 2014-10-11 23:10
  
序号
  
  
区分点
  
  
This
  
  
Super
  
  
1
  
  
属性访问
  
  访问本类中的属性,如果本类中没有此属性,则从父类中继续查找
  
  访问父类中的属性
  
  
2
  
  
方法
  
  访问本类中的方法,如果本类中没有此方法,则从父类中继续查找
  
  直接访问父类中的方法
  
  
3
  
  
调用构造
  
  调用本类构造,必须放在构造方法的首行
  
  调用父类构造,必须放在子类构造方法的首行
  
  
4
  
  
特殊
  
  表示当前对象
  
  无此概念
  

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

作者: liu951753xz    时间: 2014-10-11 23:19
楼主,要解答你的问题,我想,咱们得真正弄懂this 和 super的含义,请看我的学习笔记
作者: liu951753xz    时间: 2014-10-11 23:20
楼主,要回答你的问题,我想,我们得来理解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。又需要访问父类的构造函数,这种情况是不允许的。(他们都需要定义在第一行)
作者: 不系之舟王    时间: 2014-10-12 16:39
刚看到,学习 了
作者: 暴风    时间: 2014-10-12 23:01
liu951753xz 发表于 2014-10-11 23:20
楼主,要回答你的问题,我想,我们得来理解this和super关键字的含义,请看我的学习笔记:

this和super关键 ...

笔记做的真好!

作者: 暴风    时间: 2014-10-12 23:03
刘家斌 发表于 2014-10-11 22:34
这两个都是引用,何来赋值一说?

既然都是地址,为何不能将地址复制给另一个变量?一个可以,一个不可以
作者: 暴风    时间: 2014-10-12 23:07
搁浅灬石头 发表于 2014-10-11 22:27
this是本类中,super是子父类,变量只在本类作用域范围有效,super跨类就不行了。个人见解,纯属参考,java ...

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

是啊,就在本类中来定义一个父类类型的变量如:   父类  f = super;这种赋值编译报错!但是,: 子类  z = this;就可以。这何以解释?
作者: 搁浅灬石头    时间: 2014-10-12 23:53
暴风 发表于 2014-10-12 23:07
是啊,就在本类中来定义一个父类类型的变量如:   父类  f = super;这种赋值编译报错!但是,: 子类  z = ...

super没有赋值这种说法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2