黑马程序员技术交流社区
标题:
关于this和super的使用
[打印本页]
作者:
孙传磊
时间:
2013-2-28 19:46
标题:
关于this和super的使用
本帖最后由 孙传磊 于 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 ?
作者:
谢玉成
时间:
2013-2-28 20:11
因为Bd类和A类之间有继承关系,Bd类也就有了A类所有成员(私有除外),而num是父类A的属性,子类Bd没有声明过该num,
所以子类也就直接拿父类的来用了。
作者:
侯丛政
时间:
2013-2-28 20:17
Bd继承了A类, 也就具备了int num = 6 属性.
super.num 调用的是父类的属性, 也就是A类的num = 6;
this.num 调用的是Bd自己从A类继承过来的num = 6属性.
作者:
罗海云
时间:
2013-2-28 20:33
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();
}
}
作者:
许鑫星
时间:
2013-2-28 20:34
在子类中用this去成员变量的时候,会首先在该子类中寻找,如果没有找到再自动的去他的父类寻找。这里由于只有父类中定义了,所以你在子类中用this和super都是一样的找到了父类中的成员
作者:
刘凯
时间:
2013-2-28 20:35
楼上正解 不做过多解释 不想让子类拿到父类成员 父类私有下 子类想拿必须 super调用了就
作者:
王俊杰
时间:
2013-2-28 21:08
可以在子类里添加同名变量,赋其他值,测试之。
作者:
HM王琦
时间:
2013-2-28 23:14
因为B类继承了A类,根据继承的特性,B类就具备了A类的所方法和属性,除私有外。当A类和B类有同名变量时,可以用super和this指定访问,当B类没有就自动访问到A类
作者:
陈丽莉
时间:
2013-3-1 19:39
楼下的回答很细致了,希望下次记得自己改成【已解决】。
作者:
孙传磊
时间:
2013-3-2 15:33
嗯!好的!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2