BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #20553同步于 2011/10/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[求助]super关键字的使用

cb
2011/10/26镜像同步27 回复
public class SuperTest { public static void main(String[] args){ B b=new B(); b.bb(); } } class A{ public void visit(){ System.out.println(this.getClass()); } } class B extends A{ public void bb(){ super.visit(); } } ///// output: class B 求解释, 为啥输出是B
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
buptlong机器人#1 · 2011/10/26
B继承了A的visit方法啊 【 在 cb (搓逼) 的大作中提到: 】 : public class SuperTest { : public static void main(String[] args){ : B b=new B(); : ...................
cb机器人#2 · 2011/10/26
但是调用的时候是super.visit()呃.. 如果是this.visit()我能理解. 为啥super.visit()的时候还是B呢? 【 在 buptlong 的大作中提到: 】 : B继承了A的visit方法啊 : 【 在 cb (搓逼) 的大作中提到: 】 : : public class SuperTest { : ...................
cb机器人#3 · 2011/10/26
我在B中重写visit方法 然后再在bb()中调用super.visit() public class SuperTest { public static void main(String[] args){ B b=new B(); b.bb(); } } class A{ public void visit(){ System.out.println(this.getClass()); } } class B extends A{ public void bb(){ this.visit(); super.visit(); } public void visit(){ System.out.println("B"); System.out.println(this.getClass()); } } output: B class B class B 为啥还是super.visit()还是B呢? 【 在 buptlong 的大作中提到: 】 : B继承了A的visit方法啊 : 【 在 cb (搓逼) 的大作中提到: 】 : : public class SuperTest { : ...................
buptlong机器人#4 · 2011/10/26
因为是b.bb() 无论bb方法从哪来都是对象b在调用 【 在 cb (搓逼) 的大作中提到: 】 : 我在B中重写visit方法 : 然后再在bb()中调用super.visit() : public class SuperTest { : ...................
lovemaker机器人#5 · 2011/10/26
this是一个指向本对象的指针, 然而super只是一个标示符,并不是父类的一个对象,用以区分子类重写父类方法时的调用。 还有getClass实际上是final的,也就是都是从父类中继承过来的。
cb机器人#6 · 2011/10/26
呃, 不是这个.. 是在bb中调用了super.visit()方法呃.. 就是说visit是super调用的. 【 在 buptlong 的大作中提到: 】 : 因为是b.bb() : 无论bb方法从哪来都是对象b在调用 : 【 在 cb (搓逼) 的大作中提到: 】 : ...................
cb机器人#7 · 2011/10/26
你的意思是说, 通过super.visit()调用的this也是指向b这个实例对象的? 但是如果我给A和B都加一个成员变量 A{ private a="a"; public void visit(){ System.out.println(this.a); } } B{ private a="b"; } 然后其他不变的时候, 输出的就是"a"了. 还是没明白...[em17] 【 在 lovemaker 的大作中提到: 】 : this是一个指向本对象的指针, 然而super只是一个标示符,并不是父类的一个对象,用以区分子类重写父类方法时的调用。 : 还有getClass实际上是final的,也就是都是从父类中继承过来的。 : -- : ...................
lovemaker机器人#8 · 2011/10/26
成员变量是在编译时期绑定的,不是运行时期,而调用方法是在运行期绑定 而输出getClass是在运行期绑定 The object that represents the runtime class of this object. 【 在 cb 的大作中提到: 】 : 你的意思是说, 通过super.visit()调用的this也是指向b这个实例对象的? : 但是如果我给A和B都加一个成员变量 : A{ : ...................
cb机器人#9 · 2011/10/26
我还是没完全明白= =|| 我调试了一下 贴个图 调试界面及结果, 变量值里面显示this是B的实例,这个我明白了, 但是为啥会有两个a成员变量? 能详细的说说么? 【 在 lovemaker 的大作中提到: 】 : 成员变量是在编译时期绑定的,不是运行时期,而调用方法是在运行期绑定 : 而输出getClass是在运行期绑定 : The object that represents the runtime class of this object. : ...................