黑马程序员技术交流社区

标题: 静态方法能不能继承?为什么 [打印本页]

作者: 绝密飞行    时间: 2015-7-17 00:22
标题: 静态方法能不能继承?为什么
被final修饰的方法不能继承,我还能理解,为什么静态的也不可以呢?
作者: 绝密飞行    时间: 2015-7-17 00:23
错了错了,能被继承,但为什么不能重写?
作者: 张亚昆    时间: 2015-7-17 00:28
坐等大神
作者: 嘟嘟嘟嘟嘟    时间: 2015-7-17 00:42
静态的可以被继承,也可以被重写,不过
1. 重写父类的静态方法时子类也必须是静态方法
2. 子类不能用静态方法去重写父类的非静态方法
原因学了多态就会理解.
作者: 以梦为码    时间: 2015-7-17 00:45
因为被静态修饰后就成为全局成员方法,和静态成员变量一个意思
作者: 吃荷包蛋    时间: 2015-7-17 10:48
静态方法可以被继承,只是不能被重写
作者: 吃荷包蛋    时间: 2015-7-17 10:51
嘟嘟嘟嘟嘟 发表于 2015-7-17 00:42
静态的可以被继承,也可以被重写,不过
1. 重写父类的静态方法时子类也必须是静态方法
2. 子类不能用静态方法 ...

静态方法不能被重写,可以重载
作者: 嘟嘟嘟嘟嘟    时间: 2015-7-17 11:17
吃荷包蛋 发表于 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:23
本帖最后由 牵着蜗牛去逛街 于 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:24
嘟嘟嘟嘟嘟 发表于 2015-7-17 11:17
静态方法时可以被静态方法重写的:

请看9楼
作者: 嘟嘟嘟嘟嘟    时间: 2015-7-17 11:56
吃荷包蛋 发表于 2015-7-17 11:24
请看9楼

(⊙o⊙)嗯,理解了.不是重写,是隐藏,和成员变量类似
作者: 段培峰    时间: 2015-7-17 12:11
严格意义上叫不能重写,但我们一般说它是重写
作者: wws1214    时间: 2015-7-17 13:46
绝密飞行 发表于 2015-7-17 00:23
错了错了,能被继承,但为什么不能重写?

额,确实是一个问题,你可以试着用final修饰的属性来理解
作者: dragonsoull    时间: 2015-7-18 15:29
static修饰的可以重写也可以继承吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2