返回信息流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
这是一条镜像帖。来源:北邮人论坛 / java / #20553同步于 2011/10/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[求助]super关键字的使用
cb
2011/10/26镜像同步27 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
B继承了A的visit方法啊
【 在 cb (搓逼) 的大作中提到: 】
: public class SuperTest {
: public static void main(String[] args){
: B b=new B();
: ...................
但是调用的时候是super.visit()呃..
如果是this.visit()我能理解.
为啥super.visit()的时候还是B呢?
【 在 buptlong 的大作中提到: 】
: B继承了A的visit方法啊
: 【 在 cb (搓逼) 的大作中提到: 】
: : public class SuperTest {
: ...................
我在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 {
: ...................
因为是b.bb()
无论bb方法从哪来都是对象b在调用
【 在 cb (搓逼) 的大作中提到: 】
: 我在B中重写visit方法
: 然后再在bb()中调用super.visit()
: public class SuperTest {
: ...................
this是一个指向本对象的指针, 然而super只是一个标示符,并不是父类的一个对象,用以区分子类重写父类方法时的调用。
还有getClass实际上是final的,也就是都是从父类中继承过来的。
呃, 不是这个..
是在bb中调用了super.visit()方法呃..
就是说visit是super调用的.
【 在 buptlong 的大作中提到: 】
: 因为是b.bb()
: 无论bb方法从哪来都是对象b在调用
: 【 在 cb (搓逼) 的大作中提到: 】
: ...................
你的意思是说, 通过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的,也就是都是从父类中继承过来的。
: --
: ...................
成员变量是在编译时期绑定的,不是运行时期,而调用方法是在运行期绑定
而输出getClass是在运行期绑定
The object that represents the runtime class of this object.
【 在 cb 的大作中提到: 】
: 你的意思是说, 通过super.visit()调用的this也是指向b这个实例对象的?
: 但是如果我给A和B都加一个成员变量
: A{
: ...................
我还是没完全明白= =||
我调试了一下
贴个图
调试界面及结果, 变量值里面显示this是B的实例,这个我明白了, 但是为啥会有两个a成员变量?
能详细的说说么?
【 在 lovemaker 的大作中提到: 】
: 成员变量是在编译时期绑定的,不是运行时期,而调用方法是在运行期绑定
: 而输出getClass是在运行期绑定
: The object that represents the runtime class of this object.
: ...................