黑马程序员技术交流社区
标题:
super关键字问题
[打印本页]
作者:
sweethui1
时间:
2013-6-7 15:25
标题:
super关键字问题
本帖最后由 sweethui1 于 2013-6-7 19:44 编辑
在子类中访问父类成员用super关键字,为什么用this 也是可以的?
作者:
郑锐
时间:
2013-6-7 16:25
本帖最后由 郑锐 于 2013-6-7 16:32 编辑
不是所有方法的都可以的。
1子类继承了父类的的方法,如果子类对父类的方法进行了覆盖,想调用父类被覆盖的方法必须用super。
2如果没有覆盖,那么父类的方法其实存在于子类当中,相当于子类的一个方法,当然可以用this调用。
作者:
张歆明
时间:
2013-6-7 16:30
简单理解就是 子类是继承这个父类的东西 那么 这个东西是不是就是两个类所共有的啦?
在不重写父类方法或者没有非私有同名成员变量的前提下,子类从父类继承的东西是即可以看成自己的 也可以看成是祖先或者父类的
所以 字面意思上 就可以用this调用继承来的东西或者super来调用父类的资源 (不管哪一个 都是公有的)
但是对于重写的方法或者非私有的同名成员变量 this和super的指向就不一样了 各自指向各自的
很有点类似于生物学中的遗传和变异
作者:
孔雀东南飞
时间:
2013-6-7 17:48
楼主:
1、this代表的是本类对象,不能调用属于父类的成员(这里注意:是属于父类的成员,而不是子类继承父类后属于子类的成员)。
2、super,一般用于子类构造函数中的第一行,super(参数列表),表示调用父类构造函数。如果不写super(),表示子类构造函数会默认调用父类空参数的构造函数。
class Fu
{
int num = 3;
String name;
void show(int
num
)
{
this.num =
num
;//在this.num中num是成员变量,this是Fu的对象。红色标出的num是同一个num。楼主难道说的这里,this调用父类成员?注意:
//这里的this与子类Zi 方法function()中的this不是同一个对象
}
Fu(String name)
{
this.name = name;
}
}
class Zi extends Fu
{
void function(int num)
{
this.num = num;//这大概是楼主说的this,调用父类成员的情况吧。其实不是的,在这里,函数参数num与父类Fu成员变量num同名,同时也与子类Zi 继承Fu后属于Zi的
//num同名。关键是this.num 这里的num是属于Zi的,虽然Zi 中没有定义,但是它继承了Fu所以也有个num事属于Zi 的。this是Zi的对象。
}
Zi(String name)
{
super(name);//此时super(name)调用的是父类的构造函数
}
}
作者:
尹丽峰
时间:
2013-6-7 18:17
问题是否解决?解决请改为已解决 谢谢!
作者:
sweethui1
时间:
2013-6-7 19:49
标题:
RE: super关键字问题
现在懂了,谢谢大家!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2