多态的问题

jackeyhz 2007-09-03 12:22:55
class B
{
static void run(){
System.out.println("B");
}
}
class D extends C
{
static void run(){
System.out.println("D");
}

}
class C extends B
{ static void run(){
System.out.println("c");
}
public static void main(String[] args)
{

B b1 = new B();
b1.run();
B b2 = new C();
b2.run();
B b3 = new D();
b3.run();
C c1 = new C();
c1.run();
C c2 = new D();
c2.run();
}
}

大家事先预测一下打印结果,再谈谈为什么会导致这样的原因!!!!
...全文
154 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
awusoft 2007-09-03
  • 打赏
  • 举报
回复
学习了
awusoft 2007-09-03
  • 打赏
  • 举报
回复
结果是错的。。。。


static 的问题,如果全部改成public 答案就对了。
polarman 2007-09-03
  • 打赏
  • 举报
回复
B
B
B
c
c

静态成员函数不能重写
awusoft 2007-09-03
  • 打赏
  • 举报
回复
如果答案对了,就是最简单的多态问题了,当方法被覆盖时,调用具体引用的对像的类的那个方法
awusoft 2007-09-03
  • 打赏
  • 举报
回复
B
C
D
C
D
zephyr_cc 2007-09-03
  • 打赏
  • 举报
回复
只有非final,static,private的方法才是动态绑定的
静态绑定就是编译时就绑定了
jackeyhz 2007-09-03
  • 打赏
  • 举报
回复
static方法既然不是动态绑定,是不是编译的时候就静态绑定了?

那final方法呢?和static一样不能被动态绑定?
zephyr_cc 2007-09-03
  • 打赏
  • 举报
回复
b2.run() = B.run()
而且本来就应该这么写...
jackeyhz 2007-09-03
  • 打赏
  • 举报
回复
现在是b2指向C的对象,那b2.run()应该理解是c的对象执行run()方法,理所当然应该执行C类里的run方法喽,谁能更深层次的解译一下
jackeyhz 2007-09-03
  • 打赏
  • 举报
回复
那为什么不调用子类对象的方法?
b2引用不是指向C对象吗,怎么不运行C类中的run方法?反而执行B类中的run方法?
谁能解译一下其中的奥秒?
zephyr_cc 2007-09-03
  • 打赏
  • 举报
回复
static的方法...静态绑定
绑定在其声明类型上,而不是实际类型
lfcai 2007-09-03
  • 打赏
  • 举报
回复
静态成员函数不能重写
Norris_Zhang 2007-09-03
  • 打赏
  • 举报
回复
b b b c c
静态方法不能被覆盖,在编译时就已经决定了该调用哪个方法了。

并且静态方法建议、推荐用类名调用,因为它是属于类的,而不是属于对象的。
dashanpo 2007-09-03
  • 打赏
  • 举报
回复
还是不太懂,期待更详细答案

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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