class A{
  public static void test(){
  }
}class B extends A{
  public static void test(){
        super.test();
  }
}编译的时候,就会报错,为何静态方法不能被子类重载?

解决方案 »

  1.   

    并不是Java中的静态方法不能被子类重载 ,而是super,this关键字不能用在静态方法里面,楼主人改成这样就可以了:
    class A{
      public static void test(){
      }
    }class B extends A{
      public static void test(){
      A a=new A();
            a.test();
      }
    }
      

  2.   

    静态方法和静态变量是属于整个类的,不是哪个具体的类的对象的。所以在静态方法和静态变量中不能够用super,this这些修饰赋。
      

  3.   

    楼上说的好, 静态的东西在同类或者所有子类的实例中都是共享的. 所以你想想, A.test() 和 B.test() 成了什么关系 A.test() 存在的时候,B.test() 没有任何意义.
      

  4.   

    综合而言:
    1。super, this等关键字不能用于静态方法中
    2。静态方法及对象将被同类或者所有子类的实例所共享,因为子类和父类的关系是"is-a"。但是,尽管子类对象可以共享父类的静态方法,那么它为何不能重载父类的静态方法呢,其实我觉得静态只是表明一种全局唯一的概念,如重载(override)应该没有关系?
      

  5.   

    重载(overload)覆盖(override)看楼主的问题,应该是一个覆盖问题。
      

  6.   

    to yin_slin
    说的对,是覆盖!
      

  7.   

    Java刚学.这个问题我觉得是这样引起的错误的.
    super使用不当.
    因为static的方法是属于类对象的,
    在类对象中谈自然super自然不当
      

  8.   

    我做一下总结吧:
            1.静态方法里只能调用静态变量和方法。
            2.静态方法属于类的,而不是属于对象的。
            3.静态方法中不能使用THIS,SUPER关键字.
            4.我认为静态方法只要能被继承就能被重写。
         很高兴能和大家交流,做个朋友,说的不对请指教。