A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

被final修饰的方法不能继承,我还能理解,为什么静态的也不可以呢?

13 个回复

倒序浏览
错了错了,能被继承,但为什么不能重写?
回复 使用道具 举报
坐等大神
回复 使用道具 举报
静态的可以被继承,也可以被重写,不过
1. 重写父类的静态方法时子类也必须是静态方法
2. 子类不能用静态方法去重写父类的非静态方法
原因学了多态就会理解.
回复 使用道具 举报
因为被静态修饰后就成为全局成员方法,和静态成员变量一个意思
回复 使用道具 举报
静态方法可以被继承,只是不能被重写
回复 使用道具 举报
嘟嘟嘟嘟嘟 发表于 2015-7-17 00:42
静态的可以被继承,也可以被重写,不过
1. 重写父类的静态方法时子类也必须是静态方法
2. 子类不能用静态方法 ...

静态方法不能被重写,可以重载
回复 使用道具 举报
吃荷包蛋 发表于 2015-7-17 10:51
静态方法不能被重写,可以重载

静态方法时可以被静态方法重写的:
  1. class Fu{
  2.         static void show(){
  3.                 System.out.println("fu..show");
  4.         }
  5. }
  6. class Zi extends Fu{
  7.         static public void show(){
  8.                 System.out.println("zi...show");
  9.         }
  10. }
复制代码

回复 使用道具 举报
本帖最后由 牵着蜗牛去逛街 于 2015-7-17 11:33 编辑
绝密飞行 发表于 2015-7-17 00:23
错了错了,能被继承,但为什么不能重写?

如果父类中有一个静态的方法,子类也有一个与其方法名,参数类型,参数个数都一样的方法,并且也有static关键字修饰,那么该子类的方法会把原来继承过来的父类的方法隐藏,而不是重写。
  1. public class StaticTest
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         M m = new N();
  6.         m.output();
  7.     }
  8. }

  9. class M
  10. {
  11.     public static void output()
  12.     {
  13.         System.out.println("M");
  14.     }
  15. }

  16. class N extends M
  17. {
  18.     public static void output()
  19.     {
  20.         System.out.println("N");
  21.     }
  22. }
复制代码
回复 使用道具 举报
嘟嘟嘟嘟嘟 发表于 2015-7-17 11:17
静态方法时可以被静态方法重写的:

请看9楼
回复 使用道具 举报

(⊙o⊙)嗯,理解了.不是重写,是隐藏,和成员变量类似
回复 使用道具 举报
段培峰 来自手机 中级黑马 2015-7-17 12:11:00
12#
严格意义上叫不能重写,但我们一般说它是重写
回复 使用道具 举报
绝密飞行 发表于 2015-7-17 00:23
错了错了,能被继承,但为什么不能重写?

额,确实是一个问题,你可以试着用final修饰的属性来理解
回复 使用道具 举报
static修饰的可以重写也可以继承吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马