Java 类型转换的疑问

qc123456 2011-10-13 04:46:25
public class B {
public int i=1;
public B f() {Log.d("B","B:f() " + i); return this;}
}

public class D extends B {
public D f() {Log.d("D","D:f() " + (++i)); return this;}
}


D d = new D();

((B)d.f()).f();

上述代码运行结果:
10-13 16:45:43.627: DEBUG/D(1466): D:f() 2
10-13 16:45:43.637: DEBUG/D(1466): D:f() 3

为什么第二行log还是调用的D对象呢?都已经强制类型转换了。
...全文
55 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
风尘中国 2011-10-13
  • 打赏
  • 举报
回复
D是B的子类,你不管转不装换类型,d执行f()一定是执行子类的f()方法,这个是JAVA编译器运行时候的“自动向下绑定机制”
如果你在子类里面想要调用父类的同名方法,必须要用super.f()才可以,弄类型转换根本不解决问题

我看你只是想实验一下,给你贴个简单的例子吧

class B {
public int i=1;
public void f() {
// Log.d("B","B:f() " + i);
// return this;
System.out.println("class B invoke f method");
}
}

public class D extends B {
public void f() {
// Log.d("D","D:f() " + (++i));
// return this;
// super.f();
System.out.println("class D invoke f method");
super.f();
}

public static void main(String[] args) {
new D().f();
}
}

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧