黑马程序员技术交流社区

标题: 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