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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

个人理解是除了this应用于本类,super针对于父类。除了这个还有别的吗?

10 个回复

倒序浏览
this 可以理解成是地址值,而super 则是内存中父类的一个标识
回复 使用道具 举报
this和super不适用于静态,再就是this应用于本类,super针对于父类。没别的了!
回复 使用道具 举报
liu100chao 发表于 2015-6-15 22:35
this和super不适用于静态,再就是this应用于本类,super针对于父类。没别的了! ...

this和supere为什么不能用于静态呢?
回复 使用道具 举报
super是一个关键字,代表父类的存储空间标识。(可以理解为父亲对象的引用)
它和this的用法相似
                        a:成员变量
                                this.变量        --        本类的
                                super.变量        --        父类的
                        b:构造方法
                                this(...)        --        本类的
                                super(...)        --        父类的
                        c:成员方法
                                this.方法名()        --        本类的       
                                super.方法名()        --        父类的
回复 使用道具 举报
痞子刘忙 发表于 2015-6-15 22:45
this和supere为什么不能用于静态呢?

静态方法或者静态代码块,存在于方法区中,随着类的加载就已经存在了,而构造函数是用于给对象实例初始化的,只有NEW对象的时候才在堆中出现,就是说静态先存在,类是后出现的;换句话说:就是静态是爹,对象是儿子,爹出现的时候儿子还不知道存不存在,所以爹无法调用儿子,但是儿子可以调用爹,因为儿子出现的时候,爹早就出现了,所以对象可以调用静态!!!!
回复 使用道具 举报
  1.                 this和super的区别:
  2.                                         this:代表当前类的对象的引用
  3.                                         super:父类存储空间的标识,可理解为父类的引用,可以操作父类的成员
  4.                         用法:
  5.                                 A:调用成员变量
  6.                                         this.成员变量     ===>调用的是本类对象的成员变量
  7.                                         super.成员变量 ===>调用的是父类的成员变量
  8.                                 B:调用构造方法
  9.                                         this(...)         调用的是本类的构造方法
  10.                                         super(...)      在本类方法中调用父类的构造方法
  11.                                 C:调用成员方法
  12.                                         this.成员方法     ===>调用的是本类对象的成员方法  
  13.                                         super.成员方法   ===>调用的是父类的成员方法  ,用于在子类中调用父类的方法
  14.                 Ø 继承中构造方法之间的关系:
  15.                
  16.                                 A:子中所有的构造方法都会默认访问父类中无参的构造方法。
  17.                                         原因:
  18.                                                 因为子类会继承父类中的数据,可能还会使用父类中的数据,所以子类对象在初始化之前必须对父类的数据初始化,系统默认子类所有构造方法的第一句都是super();
  19.                                        
  20.                                 B:父类中有带参构造方法,而没有无参构造方法时,编译报错
  21.                                         解决方法:
  22.                                                         A:父类中加入无参构造方法
  23.                                                         B:用super(参数列表);    显示调用父类中带参的构造方法
  24.                                                         C:子类通过this调用本类的其它构造方法,通过其它构造方法中的super(参数列表)来完成父类的初始化
  25.                                         注意:
  26.                                                 A:无论哪种方法,都必须要访问父类的构造方法,即父类都必须初始化

  27. B:this或super调用构造方法时,必须放在第一条语句上,否则可能对父类进行多次初始化
复制代码
回复 使用道具 举报

很详细,多谢了
回复 使用道具 举报
回复 使用道具 举报
this为本类对象的引用,super是父类内存空间的标识符
回复 使用道具 举报
this为本类对象的引用,super是父类内存空间的标识符
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马