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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sweethui1 中级黑马   /  2013-6-7 15:25  /  1609 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 sweethui1 于 2013-6-7 19:44 编辑

在子类中访问父类成员用super关键字,为什么用this  也是可以的?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
本帖最后由 郑锐 于 2013-6-7 16:32 编辑

不是所有方法的都可以的。
1子类继承了父类的的方法,如果子类对父类的方法进行了覆盖,想调用父类被覆盖的方法必须用super。
2如果没有覆盖,那么父类的方法其实存在于子类当中,相当于子类的一个方法,当然可以用this调用。
回复 使用道具 举报
简单理解就是  子类是继承这个父类的东西  那么  这个东西是不是就是两个类所共有的啦?  
在不重写父类方法或者没有非私有同名成员变量的前提下,子类从父类继承的东西是即可以看成自己的  也可以看成是祖先或者父类的
所以  字面意思上 就可以用this调用继承来的东西或者super来调用父类的资源 (不管哪一个  都是公有的)

但是对于重写的方法或者非私有的同名成员变量  this和super的指向就不一样了  各自指向各自的   

很有点类似于生物学中的遗传和变异


评分

参与人数 1技术分 +1 收起 理由
尹丽峰 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
楼主:
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)调用的是父类的构造函数
    }
}

评分

参与人数 1技术分 +1 收起 理由
尹丽峰 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报 1 0
问题是否解决?解决请改为已解决  谢谢!
回复 使用道具 举报

RE: super关键字问题

现在懂了,谢谢大家!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马