java方法重写问题

qojnbbqtg 2009-10-19 07:03:54
我做了一些程序,得到如下四个结论:
1.静态方法可以覆盖静态方法。
2.非静态方法可以覆盖非静态方法。
3.静态方法不可以覆盖非静态方法。
4.非静态方法不可以覆盖静态方法。
1和2我了解一些,但3和4不清楚,高手给我讲一下3、4吧。
...全文
165 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveofmylife 2009-10-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 java2000_net 的回复:]
2楼的总结正好写反了

静态方法没有override这个说法,
[/Quote]
我也没有说static method有重写的说法啊...
zy_love 2009-10-20
  • 打赏
  • 举报
回复
学习
老紫竹 2009-10-20
  • 打赏
  • 举报
回复
2楼的总结正好写反了

静态方法没有override这个说法,
pqmww 2009-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bigbro001 的回复:]
对2楼的一点补充:
在Java语言规范(Java Language Specification)中,重写是针对实例(非静态)方法的,对于类(静态)方法,如果子类中有一个静态方法的签名与父类的一样,则叫做隐藏(hiding)

总结:
静态/实例方法(static method/instance method):重写(overriding)
非静态/类方法(non-static method/class method):隐藏(hiding)
[/Quote]...
qojnbbqtg 2009-10-20
  • 打赏
  • 举报
回复
3楼的说反了。
谢谢大家啊。。
blliy117 2009-10-19
  • 打赏
  • 举报
回复
其实对静态来说根本就没有重写这么一说。

只是叫冲突。

重写是对动态来说的,也就是对面向对象来说的。


3.静态方法不可以覆盖非静态方法。
4.非静态方法不可以覆盖静态方法。
这个冲突 viszl也举了例子了。
记住重写只会是父子类之间的动态方法上,如果重写都不成功,那不叫重写!
jackHanQi 2009-10-19
  • 打赏
  • 举报
回复
同意楼上所说的……
bigbro001 2009-10-19
  • 打赏
  • 举报
回复
对2楼的一点补充:
在Java语言规范(Java Language Specification)中,重写是针对实例(非静态)方法的,对于类(静态)方法,如果子类中有一个静态方法的签名与父类的一样,则叫做隐藏(hiding)

总结:
静态/实例方法(static method/instance method):重写(overriding)
非静态/类方法(non-static method/class method):隐藏(hiding)
loveofmylife 2009-10-19
  • 打赏
  • 举报
回复
1是错的,子类中的静态方法和父类即使签名相同也是两个不一样的方法,静态方法是类方法,调用哪个方法是在编译期确定的
例如

Animal a=new Dog();
a.eat();//假设eat是一个static得,且Animal里和Dog里的eat签名是一样的,那么这句话调用Animal的eat方法,因为调用哪个静态方法是在编译期决定的,而且不鼓励这用用实例调用static方法做法

3的道理同上
4的道理也是同上
dajiadebeibei9 2009-10-19
  • 打赏
  • 举报
回复
3 4一句话来说 就是方法类型不一样的不能覆盖

62,621

社区成员

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

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