the static method cannot hide instance method from object

hjjk123 2010-05-10 10:12:31
为什么 父类如果有 proctected 的方法 假如 为

proctected void fo(){}


子类 如果 覆盖fo()的

子类的fo为什么不能是


public static void fo()
{
}


也就是 为什么不能用static方法覆盖 proctected 的方法

说明原因/../.........谢谢
...全文
454 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjjk123 2010-05-11
  • 打赏
  • 举报
回复
notlogin

能否把那10条要求发上来

Google了没有啊
hjjk123 2010-05-11
  • 打赏
  • 举报
回复
太感谢 7#的朋友了!

Ark032425 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 notlogin 的回复:]
另外还有一点,虽然你没犯这个错,但是也要小心
你父类的代码访问权限是 protected的,子类重写后是public的,这样肯定没问题

但是要注意,子类重写父类的方法,子类方法的访问权限 >= 父类的方法的访问权限
[/Quote]
有见地
notlogin 2010-05-10
  • 打赏
  • 举报
回复
另外还有一点,虽然你没犯这个错,但是也要小心
你父类的代码访问权限是 protected的,子类重写后是public的,这样肯定没问题

但是要注意,子类重写父类的方法,子类方法的访问权限 >= 父类的方法的访问权限
notlogin 2010-05-10
  • 打赏
  • 举报
回复
子类重写父类的方法中有10种要求,其中二条是

1、子类不能用 静态方法 重写 父类的非静态方法。 你犯的就是这个错误。与protected关键字无关

2、同理 子类不能用 非静态方法 重写 父类的静态方法

1、2即是说,子类要重写父类的方法,要么都是静态的,要么都是非静态的

justlearn 2010-05-10
  • 打赏
  • 举报
回复
如果这样可以的话,等于修改了访问方式了。
试想,原先proctected void fo(){}是为了让你继承使用
你当然可以覆盖他,但是原来他是要你用new来调用了,现在变成可以直接调用了
如果你这个子类再有子类,那么静态方法是不能被覆盖的,这样你的子类的子类和最初的父类就脱节了。
如果是这样的话,那么无疑又增加了继承的复杂性
pengliming1 2010-05-10
  • 打赏
  • 举报
回复
帮 顶。。。。
hjjk123 2010-05-10
  • 打赏
  • 举报
回复
但 想 通过
fo.proctect()直接调用而不创建对象为什么不行呢??

这样规范好诡异 啊!!

hjjk123 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 believefym 的回复:]
会引起歧义吧

Java code
instance.staticMethod()
instance.nonStaticMethod()

都是可以的

那你instance.fo()的时候就没办法分辨call的是static的那个还是非static的那个了
[/Quote]

也就是说是 一种java语言规范?????????

believefym 2010-05-10
  • 打赏
  • 举报
回复
会引起歧义吧
instance.staticMethod()
instance.nonStaticMethod()

都是可以的

那你instance.fo()的时候就没办法分辨call的是static的那个还是非static的那个了
hjjk123 2010-05-10
  • 打赏
  • 举报
回复
忘了 说 了

会提示异常

the static method cannot hide instance method from p

当然这里假设父类是 p

62,614

社区成员

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

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