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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙传磊 中级黑马   /  2013-2-28 19:46  /  2070 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙传磊 于 2013-2-28 21:27 编辑

class A {
  int num=6;
}
class Bd  extends A {
        void show(){
                System.out.println(super.num);        //      (*)
        }
}
class C {
         public static void main (String[] args){
                 Bd b=new Bd();
                 b.show();
         }
}
super代表的是父类对象的引用,而this代表的是本类对象的引用
为什么 把 * 处的 super 改成 this 输出结果也是 6 ?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

9 个回复

倒序浏览
因为Bd类和A类之间有继承关系,Bd类也就有了A类所有成员(私有除外),而num是父类A的属性,子类Bd没有声明过该num,
所以子类也就直接拿父类的来用了。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 请改名字~ 谢谢合作~

查看全部评分

回复 使用道具 举报
Bd继承了A类, 也就具备了int num = 6 属性.
super.num 调用的是父类的属性, 也就是A类的num = 6;
this.num 调用的是Bd自己从A类继承过来的num = 6属性.

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
class A {
  int num=6;
}
class Bd  extends A { 因为Bd继承了A, 如果你用super.num就会直接调用父类成员变量..假如你用this的话.Bd会先在自己类里面找, 如果没找到,就会直接调用父类的num
        void show(){
                System.out.println(super.num);        //      (*)
        }
}
class C {
         public static void main (String[] args){
                 Bd b=new Bd();
                 b.show();
         }
}
回复 使用道具 举报
在子类中用this去成员变量的时候,会首先在该子类中寻找,如果没有找到再自动的去他的父类寻找。这里由于只有父类中定义了,所以你在子类中用this和super都是一样的找到了父类中的成员
回复 使用道具 举报
楼上正解 不做过多解释  不想让子类拿到父类成员 父类私有下  子类想拿必须 super调用了就
回复 使用道具 举报
可以在子类里添加同名变量,赋其他值,测试之。
回复 使用道具 举报
因为B类继承了A类,根据继承的特性,B类就具备了A类的所方法和属性,除私有外。当A类和B类有同名变量时,可以用super和this指定访问,当B类没有就自动访问到A类
回复 使用道具 举报
楼下的回答很细致了,希望下次记得自己改成【已解决】。
回复 使用道具 举报
嗯!好的!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马