程序运行过程

简洁是智慧的灵魂 2010-04-23 10:14:28
运行下面代码,程序输出结果是:
class Base{
int i = 99;
public void amethod(){
System.out.println("Base.amethod()");
}
Base(){
amethod();
}
}

public class Derived extends Base{
int i = -1;
public static void main(String argv[]){
Base b = new Derived();
System.out.println(b.i);
b.amethod();
}
public void amethod(){
System.out.println("Derived.amethod()");
}
}
请前辈解答并解释,多谢,看不懂运行结果
...全文
112 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
justlearn 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wangpeifeng669 的回复:]
重写是怎么回事,是因为Base对象没有实例化,所以把方法覆盖了吗
[/Quote]
子类重写了父类的方法,这样就有了多态的实现,当把子类引用指向父类,这样调用时候就会调用子类重写的方法,而不会调用父类的方法了
justlearn 2010-04-23
  • 打赏
  • 举报
回复
如果是Derived b = new Derived();
的话就会是-1
Base b = new Derived();
就会是99
龙飞tgbmlp 2010-04-23
  • 打赏
  • 举报
回复
i为什么还是99呢?
  • 打赏
  • 举报
回复
重写是怎么回事,是因为Base对象没有实例化,所以把方法覆盖了吗
xiaomaha 2010-04-23
  • 打赏
  • 举报
回复
重写了! 都运行 Derived.amethod()
i 同样是99

中文都不会打了哈哈!
xiaomaha 2010-04-23
  • 打赏
  • 举报
回复
重新了 都运行 Derived.amethod()
i 同意是999
北狐狸 2010-04-23
  • 打赏
  • 举报
回复
父类与子类之间:1\方法重写(多态);2\域重定义(访问隐藏).
davis_rly 2010-04-23
  • 打赏
  • 举报
回复
Base.amethod()
99
"Derived.amethod()"
多态只适用于实例方法!!!!! 记住了哦
lonefeifei 2010-04-23
  • 打赏
  • 举报
回复
哦,知道了,看错了,嘿嘿
lonefeifei 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 justlearn 的回复:]
如果是Derived b = new Derived();
的话就会是-1
Base b = new Derived();
就会是99
[/Quote]
为什么是99呢?可否解释下?

62,614

社区成员

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

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