this | super |
this存储在JVM堆内存中Java对象的内部, this变量 中保存了内存地址指向了自身 | super 可以理解为是指向自己父类对象的一个指针, 而这个父类指的是离自己最近的一个父类 |
调用 | We can call the superclass and access superclass |
放在类成员的位置
this | super |
属性 | 属性 |
方法 | 方法 |
构造方法 | 构造方法 |
块 | 块 |
内部类 | 内部类 |
super 和 this 可以互相调用吗?
一般方法之间
任意两个一般方法可以来回相互调用(隐含使用this
)编译能过,但是有可能会出现栈内存溢出
构造方法之间
1、this
和 super
可以在构造方法中,但是必须要放在构造方法的 第一行
否则编译报错,而且此时顶替掉了 默认的super()构造方法
2、构造方法中以下不允许:出现 多个this
,多个super
,super和this组合
3、任意两个构造方法不能来回相互调用,编译过不去
综述对比
We can call the superclass methods and access superclass variables using super keyword
1.this和super都是指代词:代替的是实例对象
2.this指代的是:执行方法是一般方法 当前对象,但不一定是当前类的对象--
如果执行的是构造方法的话,this只能指代当前对象,不会有机会指代子类对象
3.super指代的是:包含这个super语句的执行方法所在类的父类的对象 !!!!!!!!!!!!!!!!!!自己总结的这句话
4.this和super都能调用一般属性和一般方法(而非静态的)
5.this和super可以放在类成员的任意位置---属性--方法--构造方法--块
5.1一般方法之间---任意两个一般方法可以来回相互调用---编译能过---但是有可能会出现栈内存溢出
5.2构造方法之间---任意两个构造方法不能来回相互调用---编译过不去-----因为他们来来回调用---没有给super留一个位置去创建父类对象
5.3this 和 super 可以在构造方法中来调用自己或父亲类的构造方法,必须要放在构造方法的第一行---否则编译报错--而且此时顶替掉了默认的super()构造方法
5.4构造方法中以下不允许:出现多个 this---多个 super---super 和 this 的组合。因为都要求第一行的话,但是不能同时出现在代码的第一行